因为复制过来就散了,就截图了
题意:求这个积分然后进行取模的判断,得出答案。
思路:这题题意很好懂,但是我们折在了求积分上面了,这个应该是一个分部积分,完了,放个假上学期学的都给忘了,具体过程就不在这推导了,应该是[(n!)^2 ] / (2n+1)!。
先打一个阶乘表后面调用,所以这题的重点放在了pq^-1上面,因为取余的998244353是素数,所以根据逆元的道理 pq-1=p*qp-2(mod)998244353。
逆元:ax=1(mod p)的解出的x为a关于p的逆元,一般让你mod的这个数都是一个比较大的素数,所以(a/b)mod p可以写成(ab^-1)mod p,b^-1就是b的逆元。
费马小定理:p为素数,且gcd(a,p)=1,a^(p-1)=1 (mod p),所以两个式子联立可得aa^(p-2)=1 (mod p),a关于p的逆元就是a(p-2),所以快速幂来求一下a(p-2)就可以了。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
ll a[2100005];
ll qpow(ll x,ll y)//快速幂
{
ll ans=1;
while(y){
if(y&1) ans=(ans*x)%mod;
y/=2;x=(x*x)%mod;
}
return ans;
}
int main ()
{
ios::sync_with_stdio(false);
ll n;
a[0]=1;//预处理为1
for(int i=1;i<=2100000;i++){
a[i]=a[i-1]*i%mod;//提前算好阶乘数组
}
while(cin>>n){
ll up=a[n]*a[n]%mod;//分子
ll down=qpow(a[2*n+1],mod-2)%mod;//分母用逆元求
cout<<up*down%mod<<endl;//答案就是相乘再取模
}
return 0;
}