首页 > 其他 > 详细

中国剩余定理

时间:2018-03-11 18:41:09      阅读:169      评论:0      收藏:0      [点我收藏+]

 

 

技术分享图片
LL exGcd(LL a,LL b,LL &x,LL &y)
{
    if(!b)
    {
        x=1,y=0;
        return a;
    }
    LL d=exGcd(b,a%b,y,x);
    y=y-a/b*x;
    return d;
}

LL chineseRemainder(LL n,LL *a,LL *b)///a是余数,b是模数
{
    LL a1=0,a2,b1=1,b2,x,y,ans=0,gcd;
    for(int i=0;i<n;i++)
    {
        b2=b[i],a2=a[i];
        gcd=exGcd(b1,b2,x,y);
        if((a1-a2)%gcd)
            ans=-1;
        else
        {
            x=x*((a1-a2)/gcd);
            x=x%(b2/gcd);

            a1=a1-x*b1;
            b1=b1/gcd*b2;
            a1=a1%b1;
        }
    }
    if(ans!=-1)
        ans=(a1%b1+b1)%b1;
    if(!ans)
        ans=b1;
    return ans;
}
View Code

 

笔记:

  里面有一个 gcd 的参数,他所代表的意义就是 ax+by 的最小值,之后我就可以根据这个数对 a,b所

  对应的最小值进行翻倍处理就可以得到想要的 c 值,如果 c % gcd != 0 则表示函数没有解。

中国剩余定理

原文:https://www.cnblogs.com/wethura/p/8544900.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!