数论复习之中国剩余定理

来源:互联网 发布:apache ivy maven 编辑:程序博客网 时间:2024/06/06 10:54

设W1,W2,…,Wk是两两互质的正整

即gcd(Wi,Wj)=1, i≠j,1<=i, j=k, 则下面方程组有惟一解:

X≡b1 mod W1 ———表示X % W1==b1
X≡b2 mod W2 ———表示X % W2==b2
……
X≡bk mod Wk ———表示X % WK==bK

上面方程组的解为:

X=(M1*M1^(-1)*b1 + M2*M2^(-1)*b2 +…+ Mk*Mk^(-1)*bk ) mod P

其中:

P = W1*W2*…*Wk

Mi = P / Wi

代码:

int China(int B[ ],int W[ ],int k)    {                int i,d,x,y,ans=0,Mi,P=1;            for(i=1;i<=k;i++)  P*=W[i];            for(i=1;i<=k;i++)            {            Mi=P/W[i];            d=ext_euclid(Mi,W[i],x,y);             //扩欧求Mi的逆元               ans=(ans+x*Mi*B[i])%P;          }          if(ans>0)return ans;         else return(ans+P);      } 

应用:田忌赛马、周期问题。

1 0