码迷,mamicode.com
首页 > 其他好文 > 详细

通常情况下的中国剩余定理

时间:2017-10-17 22:59:30      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:之间   分解   应该   方法   组成   方程组   问题   log   时间   

        这几天学了学中国剩余定理。。。。本来计划是一天学互质版一天学非互质版的,结果非互质版就学了好长时间。。。不过好在会证明了,考场上大力推一波应该是没问题的吧。。。

        中国剩余定理是求形如x≡a1(mod m1),x≡a2(mod m2)......x≡an(mod mn)这样的方程组的通解

        我们考虑一下求这组方程组的最暴力的方法,对于每个方程,我们求一下mi的倍数加上ai的所有数,然后把这些数标上号,一个一个枚举所有解就行了。

        但是当mi ai相差很大的时候,时间复杂度也注定会很高。

        其实我们没有必要求出所有的k×mi+ai,我们只要求出最小的使方程组成立的值,然后将这个值每次加上lcm(mi,mj)就行了。因为既然x对于2个方程都成立,那么这两个方程的两个通解之间相差的最小值一定是lcm(m1,m2).证明如下:

设x1,x2为方程x≡a1(mod m1),x≡a2(mod m2)的两个解
则有:x1-x2≡0(mod m1),x1-x2≡0(mod m2)
那么:x1-x2=k1×m1,x1-x2=k2×m2
则:k1×m1=k2×m2,设d=gcd(m1,m2)
则k1×m1/d=k2×m2/d,那么k1×m1/d≡0(mod m2/d)
则有gcd(m1/d,m2/d)=1
则k1可分解为y×m2/d的形式,代回原式得x=y×lcm(m1,m2)

        那么两两方程之间就可以合并成x≡M(mod lcm(m1,m2))的形式了,合并过程如下:

x≡a1(mod m1),x≡a2(mod m2)
设x=k1*m1+a1,x=k2*m2+a2,d=gcd(m1,m2)
联立两方程得:k1*m1+a1=k2*m2+a2
由裴蜀定理得,当d丨(a2-a1)时,原方程才有解 则k1
*m1/d=k2*m2/d+(a2-a1)/d 即:k1*m1/d≡(a2-a1)/d(mod m2/d) 则:k1≡(a2-a1)/d*(m1/d)^(-1)(mod m2/d) 这里(a2-a1)/d*(m1/d)^(-1)是个定值,我们用y来代替 则:k1=k*m2/d+y 将k1代入原式 有:x=y*m1+k*lcm(m1,m2)+a1 即x≡y*m1+a1(mod lcm(m1,m2))

        按照这样的方法,将方程两两合并之后就可以得到方程组的通解

通常情况下的中国剩余定理

标签:之间   分解   应该   方法   组成   方程组   问题   log   时间   

原文地址:http://www.cnblogs.com/hinanawitenshi/p/7684112.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!