中国剩余定理

https://www.cnblogs.com/MashiroSky/p/5918158.html

(拼凑自以上连接)

备忘录:

a|b是指a能整除b,a是b的因式,4|2是不成立的,2|4才成立

lcm(a,b) a,b的最小公倍数

中国剩余定理

设正整数两两互素,则同余方程组

                             

有整数解。并且在模下的解是唯一的,解为

                               

其中,而的逆元。

int exgcd(int a,int b,int &x,int &y){
    if(b==0){
        x=1;y=0;
        return a;
    }
    int g=exgcd(b,a%b,x,y);
    int x1 = y,y1 = x-a/b*y;
    x = x1;
    y = y1;
    return g;
}
int inv(int m, int p){
    int x, y;
    int g = exgcd(m,p,x,y);
    return ((x%p)+p)%p;
}

ll CRT(ll a[], ll m[], int n)
{
    ll M=1;
    for(ll i=0; i<n; i++) M*=m[i];
    ll ans=0;
    for(ll i=0; i<n; i++){
        ll Mi=M/m[i];
        ll x=inv(Mi,m[i]);
        ans=(ans+Mi*x*a[i])%M;
    }
    return (ans+M)%M;
}

扩展中国剩余定理

中国剩余定理扩展——求解模数不互质情况下的线性方程组:

  普通的中国剩余定理要求所有的互素,那么如果不互素呢,怎么求解同余方程组?

  这种情况就采用两两合并的思想,假设要合并如下两个方程:

  那么得到:

  我们需要求出一个最小的x使它满足:

  那么x1和x2就要尽可能的小,于是我们用扩展欧几里得算法求出x1的最小正整数解,将它代回a1+m1x1,得到x的一个特解x′,当然也是最小正整数解。

  所以x的通解一定是x′加上lcm(m1,m2)∗k,这样才能保证x模m1和m2的余数是a1和a2。由此,我们把这个x′当做新的方程的余数,把lcm(m1,m2)当做新的方程的模数。(这一段是关键

  合并完成:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值