设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);
}
应用:田忌赛马、周期问题。