数论|NowCoder 练习 —— 数数(数学)

题目链接: 数数
一、题目描述 数论|NowCoder 练习 —— 数数(数学)
文章图片

二、输入描述:

  • 多组数据。
  • 第一行一个数 T,表示测试数据组数。(1 <= T <= 5)
  • 接下来 T 行,每行一个数 n。(1 <= n <= 107)
三、输出描述: 【数论|NowCoder 练习 —— 数数(数学)】对于每一组测试数据,输出一行两个数,即这组测试数据的答案。
示例1:
  • 输入
    1
    1
  • 输出
    1 1
四、思路
  • 很显然的数学结论题。
  • 对于第一个式子 求和为 S[x] = (n*(n+1)/2)2
  • 对于第二个式子 求和为 S[x] = (x!)2*n
五、Code
#include using namespace std; #pragma GCC optimize(2) #define ios std::ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); #define ll long long const int Max = 1e7+3; const int mod = 998244353; template T poww(T a, T b) { ll s = 1; while (b) {if (b&1) {s = (s*a)%mod; } b = b >> 1; a = (a%mod)*(a%mod)%mod; } return s; }int T; ll n, a[Max]; int main() { ios a[0]=1; for(int i=1; i> T; while(T--) {cin >> n; ll ans1, ans2, tmp; ans1 = (((n+1)*n)/2)%mod; ans1 = (ans1*ans1)%mod; ans2 = poww(a[n], 2*n)%mod; cout << ans1 << " " << ans2 << endl; } return 0; }

蒟蒻一只,欢迎指正

    推荐阅读