链接:https://www.nowcoder.com/acm/contest/114/B
来源:牛客网
题目描述
Ans = 0;C(i,v)为组合数第i行第v列的数。
For(inti = 1; i <= n; i++)
For(int v = 0; v <= n; v++)
Ans = (Ans + C(i, v) * C(i, v)) % 998244353;
给你上面的代码中的n,请你输出Ans的值。
输入描述:
输入一个整数n
输出描述:
输出Ans的值。
备注:
n<=106
这题然后就变成了 求组合数的问题了
这题需要取模,所以用费马小定理
先预处理求出阶乘和
(a[i * 2] % mod) * (expmod(a[i] * a[i] % mod, mod - 2) % mod) % mod) 这个就是C(n,2*n)的值
1 #include <iostream> 2 #include <cstdio> 3 #include <string> 4 #include <map> 5 #include <cstring> 6 #include <algorithm> 7 using namespace std; 8 const int maxn = 2e6 + 10; 9 const int mod = 998244353; 10 typedef long long LL; 11 LL expmod(LL a, LL b) { 12 LL ret = 1; 13 while(b) { 14 if (b & 1) ret = ret * a % mod; 15 b = b >> 1; 16 a = a * a % mod; 17 } 18 return ret; 19 } 20 LL a[maxn]; 21 void init() { 22 a[0] = a[1] = 1; 23 for (int i = 2 ; i < maxn ; i++) 24 a[i] = a[i - 1] * i % mod; 25 } 26 int main() { 27 init(); 28 int n; 29 scanf("%d", &n); 30 LL ans = 0; 31 for (int i = 1 ; i <= n ; i++) 32 ans = (ans + (a[i * 2] % mod) * (expmod(a[i] * a[i] % mod, mod - 2) % mod) % mod) % mod; 33 printf("%lld ", ans); 34 return 0; 35 }