即求一个数x,使得x除以n个模数分别为a1,a2,a3……an(注意这里的除数必须要两两互质)得到n个余数r1,r2,r3……rk。求这个数x.中国剩余定理求的就是这个数x。
求解过程:
1)令p=a1*s2*a3*……*an,ki=p/ai (i从1到n)。
2)我们要找到这样的数 di%ki==0且di%ai==ri (i从1到n)(这里可以用到我上篇讲到的扩展欧几里德算法来求得di),若这样的di不存在,则找不到这样的x,该题无解。
3)当求出d1,d2,d3……dn后,相加得到w,w为其中一个解,且通解x=w+t*p (t为任意自然数)
求解完毕。
证明:
这里证明第3点。在(2)里,有di%ki=0,所有,di是可以整除ai外的所有除数,而且di%ai=ri
所以我们很容易得知, (d1+d2+d3+……+dn)%ai
=d1%ai+d2%ai+d3%ai+……+dn%ai
=di%ai
=ri
证毕。
重要提醒:
这里的模数要求一定要两两互质,否则按这种方法做出的程序会出现各种问题。
例如,当模数为4和6,余数为1和3时,显然我们得知答案是9,但用上述方法是求不出答案的。
如果按照上述做法,无论6的多少倍模4都不可能模出1来。
而两个数互质的话就能保证其中一个数的倍数模另一个数能模出所有的值
假设a和b互质,则只需证明(t*a)%b=1(t为任意自然数)即可
然后只需使t扩展n倍,则余数也会相应扩展n倍。
那么如何证明呢?
上式可变形为t*a=k*b+1。
然后根据我上一篇博文所提到的扩展欧几里德算法,可知这个二元一次方程必定有解
相关题目:poj2891、poj1006,以及我大华农07年新生赛的韩信点兵