中国剩余定理模板

void ext_gcd(int a,int b,int &d,int &x,int &y)
{
    if(!b)
    {
        x=1;y=0;d=a;
        return ;
    }
    else
    {
        ext_gcd(b,a%b,d,y,x);
        y-=a/b*x;
    }
}
int a[100],m[100],M;///x=a[i](mod m[i])
int China(int r)
{
    M=1;
    for(int i=1;i<=r;i++) M*=m[i];
    int ans=0;
    for(int i=1;i<=r;i++){
        int Mi=M/m[i],d,x0,y0;
        ext_gcd(Mi,m[i],d,x0,y0);
        ans=(ans+x0*a[i]*Mi)%M;
    }
    ans=(ans%M+M)%M;
    return ans;
}


你可能感兴趣的:(中国剩余定理模板)