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

中国剩余定理

时间:2018-03-11 19:16:35      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:个数   中国   笔记   view   gif   表示   one   return   最小   

 

 

技术分享图片
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 则表示函数没有解。

中国剩余定理

标签:个数   中国   笔记   view   gif   表示   one   return   最小   

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

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