码迷,mamicode.com
首页 > 其他好文 > 详细

拓展中国剩余定理(不互质的情况)

时间:2016-04-18 13:24:51      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

每次合并两个同余模方程,然后用exgcd解即可。

技术分享
ll LCM(ll a,ll b)
{
    return a/__gcd(a,b)*b;
}

void exgcd(ll a,ll b,ll &d,ll &x,ll &y)
{
    if(b==0){
        x=1;y=0;d=a;
        return;
    }
    exgcd(b,a%b,d,y,x);
    y-=x*(a/b);
}

ll MLE(ll a,ll b,ll n)
{
    ll x,y,d;
    exgcd(a,n,d,x,y);
    if(b%d) return -1;
    x*=(b/d);
    return (x%n+n)%n;
}

ll ex_china(ll *a,ll *m,int n)
{
    ll x,y,d;
    ll M=1,A=0;
    REP(i,1,n){
        ll k=MLE(m[i],A-a[i],M);
        if(k==-1) return -1;
        A=k*m[i]+a[i];
        M=LCM(M,m[i]);
    }
    return (A+M)%M;
}
View Code

 

拓展中国剩余定理(不互质的情况)

标签:

原文地址:http://www.cnblogs.com/--560/p/5403973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!