WA40分求助
查看原帖
WA40分求助
507348
__vector__楼主2022/3/1 21:29

复习了一下crt,之前用的是exgcd求逆元过了,我就尝试换成费马小定理来求,重新写了一边,神奇WA了,是我求逆元写挂了还是别的部分写挂了?
代码:

#include <bits/stdc++.h>
using namespace std;
#define reg register
#define int long long
namespace IAKIOI
{
    typedef long long ll;
    const int maxn=11;
    int n;
    int mod[maxn];
    int a[maxn];
    ll MUL=1;
    ll MOD[maxn];
    ll c[maxn];
    ll ksm(ll a,ll b,ll p)
    {
        ll ret=1;
        while(b)
        {
            if(b&1)ret=ret*a%p;
            a=a*a%p;
            b>>=1;
        }
        return ret;
    }
    ll inv(ll a,ll p)
    {
        return ksm(a,p-2,p);
    }
    void main()
    {
        scanf("%lld",&n);
        for(reg int i=1;i<=n;i++)
        {
            scanf("%lld%lld",&mod[i],&a[i]);
            MUL*=(ll)mod[i];
        }
        for(reg int i=1;i<=n;i++)
        {
            MOD[i]=MUL/(ll)mod[i];
            c[i]=inv(MOD[i],(ll)mod[i]);
            c[i]=(c[i]%(ll)mod[i]+(ll)mod[i])%(ll)mod[i];
        }
        ll ans=0;
        for(reg int i=1;i<=n;i++)
        {
            ans+=a[i]*MOD[i]*c[i];
        }
        ans%=MUL;
        printf("%lld",ans);
    }
}
signed main()
{
    IAKIOI::main();
    return 0;
}
2022/3/1 21:29
加载中...