牛客暑假多校训练营(第一场)J-Easy Integration-积分,逆元

因为复制过来就散了,就截图了
在这里插入图片描述
在这里插入图片描述
题意:求这个积分然后进行取模的判断,得出答案。
思路:这题题意很好懂,但是我们折在了求积分上面了,这个应该是一个分部积分,完了,放个假上学期学的都给忘了,具体过程就不在这推导了,应该是[(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),所以两个式子联立可得a
a^(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;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值