中国剩余定理

用来求解模数互质的同余方程组,

   即求一个数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年新生赛的韩信点兵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值