Easy Integration---J
题目大意
给出一个n,求出积分,其结果一定是这种形式,求
定积分函数式:
1 ≤ n ≤ 10^6
测试用例数不超过 10 ^ 5,对于每个测试用例,请打印一个表示结果的整数。
思路
1.求出定积分(论学好高数的重要性)
2.求阶乘
因为n<=10^6,分母为 2*n+1,打表到2000005即可
3.费马小定理求(a/b)%m
设C是B的逆元,则有
B*C≡1(mod P);(1)
(A/B)mod P =A*C(mod p),(2)
又由费马小定理得 B^(p−1) ≡ 1 (mod p) <--> B*B^(p−2 )≡ 1 (mod p) ;(3)
结合(1)与(3)得C=B^(p-2)
所以原式可转化成:
(A*C)%p=(A%p*C%p)%p=(A%p*( B^(p-2) )%p)%p
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const long long mod=998244353;
ll a[2000010];
ll mm(ll a,ll b)
{
ll r=1;
if(b<0)return 0;
while(b)
{
if(b&1)r=r*a%mod;
a=a*a%mod;
b>>=1;
}
return r;
}
int main() {
a[0]=1;
int n;
for(int i=1;i<=2000005;i++)
a[i]=(a[i-1]*i)%mod;
while(~scanf("%d",&n))
{
ll fz,fm;
fz=(a[n]*a[n])%mod;
fm=a[2*n+1];
//cout<<fz<<" "<<fm<<endl;
ll p=mm(fm,mod-2)%mod;
//cout<<p<<" "<<fm<<endl;
ll ans = (p%mod*fz)%mod;
printf("%lld\n",ans);
}
}