对于同余方程组:
x=a1 (mod m1); 1
x=a2 (mod m2); 2
方程组有一个小于m(m1,m2的最小公倍数)的非负整数解的充分必要条件是(a1-a2)%(m1,m2)==0 ,同样利用扩展欧几里德算法。
两式联立:a1+m1*y=a2+m2*z。
则:a1-a2=m2*z-m1*y; 这样就可以了解出z和y,则:x=a2+m2*z;
:(设m1,m2,···,mk两两互素) PS:使用中国剩余定理的条件
x=a1(mod m1);
x=a2(mod m2);
···
M=m1*m2*···*mk;中有唯一整数解。
如果记ei=Mi*pi;那么:ei=0 (mod mj),j!=i; ei=1(mod mj),j=i;
很明显,e1*a1+e2*a2+···+ek*ak就是方程的一个解,加减M倍后就可以得到最小非负整数解了。(没看懂)
如果m1,m2,···,mk不互素,那只能两个两个求解线性同余方程组了。
x=a1 (mod m1);
x=a2 (mod m2);
.............
解完后,a=x; m=m1和m2的最小公倍数。即可。
PS:应用中国剩余定理解线性同余方程组的条件是m1,m2,···,mk两两互素,适用范围小于普通的方法解线性同于方程组。我没有看懂这个定理,所以我遇到题目的时候
会选择普通方法来求解,这个定理的结论暂且背下来。
令Mi=M/mi,因为m1,m2,m3...mr两两互素,因此(Mi,mi)=1;即MiPi==1(mod mi)。(==为同余的意思)
那么容易验证a1M1p1+a2M2p2+a3M3p3+......+arMrpr就是同余方程组的解。(这里pi需要利用扩展欧几里得求解出来)
下面给出求此类同余方程组最小非负整数解的算法实现。
POJ 1006:Biorhythms
题目 : http://poj.org/problem?id=1006
中国剩余定理的直接应用。
根据题意可得
模版:
HDU1788:
刷够了,先在这里存着吧,未完待续。15.1.21
Chinese remainder theorem again