首先要将这个积分公式化简,用分部积分法不断的去积分
逆元的定义:对于a和p,若a*b%p≡1,则称b为a%p的逆元。
在求逆元的时候要用到费马小定理:
费马小定理:假如p是质数,且gcd(a,p)=1,那么 a^(p-1)≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
所以说我们要求的逆元也就是a^(p-2);
因为题目中的p特别大,所以就要用到快速幂。
int quick_power(int x,int y){
int ans=1;
while (y) {
if(y&1) ans=1LL*ans*x%M;
y>>=1;
x=1LL*x*x%M;
}
return ans;
}
最后代码如下
#include<bits/stdc++.h>
using namespace std;
int const N=2e6+10;
int const M=998244353;
int f[N],n;
int quick_power(int x,int y){
int ans=1;
while (y) {
if(y&1) ans=1LL*ans*x%M;
y>>=1;
x=1LL*x*x%M;
}
return ans;
}
int main(){
f[0]=1;
for(int i=1;i<N;i++)
f[i]=1LL*f[i-1]*i%M; //求阶乘
while (scanf("%d",&n)==1){
printf("%d\n",1LL*f[n]*f[n]%M *quick_power(f[2*n+1],M-2)%M);
}
return 0;
}