费马小定理求逆,但是只有10分
查看原帖
费马小定理求逆,但是只有10分
755242
creepaid_awa楼主2023/10/4 09:06

帮忙看看吧,卡了3天了qwq

#include<bits/stdc++.h>
using namespace std;
#define int long long

int n,a[15],b[15],m[15],M=1,M1[15],ans;

int read(){
    int rt=0;char x=getchar();
    while(x<'0'||x>'9')x=getchar();
    while(x>='0'&&x<='9')
    rt=(rt<<3)+(rt<<1)+(x^48),x=getchar();
    return rt;
}

int expow(int x,int y,int p){
    int rt=1;
    while(y){
        if(y&=1)rt*=x,rt%=p;
        x=(x*x)%p;    y>>=1;
    }
    return rt;
}

int mod_inverse(int a,int p){
    return expow(a,p-2,p);
}

signed main(){
    n=read();
    for(int i=1;i<=n;++i){
        cin>>a[i]>>b[i];
        m[i]=a[i];
        M*=m[i];
    }
    for(int i=1;i<=n;++i){
        M1[i]=M/m[i];
        ans=(ans+b[i]*M1[i]*mod_inverse(M1[i],M))%M;
    }
    cout<<ans%M<<endl;
    return 0;
}
2023/10/4 09:06
加载中...