中国剩余定理(除数不互质)

对于 x%mod[1]=a[1]

x%mod[2]=a[2]

x%mod[3]=a[3]

...

 mod[i] 之间不一定互质,求解最小x。


对于 mod[i] 之间不一定互质的情况,需要将剩余定理修改一点。


对于第一个方程 x[0]%mod[0]=a[0] ,可知 x[0] 的最小解即为 a[0] 。对于第二个方程 x[1]%mod[1]=a[1] ,假设 x[1]=x[0]+mod[0]*k ,这样 x[1] 可以既满足第一个方程也满足第二个方程,得到 (x[0]+mod[0]*k)%mod[1]=a[1]。此方程可由扩展欧几里得的思想化为 x[0]+mod[0]*k+mod[1]*y=a[1]

mod[0]*k+mod[1]*y=a[1]-x[0]

可解得最小k,然后求得 mod[0]*k ,即可得到 x[1] 。

如此,相当于将第一个方程和第二个方程合成了一个新的方程 x[1]%Lcm(mod[0],mod[1])=s(s的值并没有用),可以继续计算下去,算到最后一个方程时,答案即为最后一个 x[i] 。


代码:

int China(int m[],int a[],int n)//m为除数,a为余数,n为方程个数
{
    int ans=a[0];
    int Lcm=m[0];
    for(int i=1;i


你可能感兴趣的:(小模板)