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


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

            中国剩余定理是求形如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))

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

  • 相关阅读:
    存储过程的语法
    C#之理解接口的作用
    获取gridview模板列里面的控件的ID
    asp.net asp:Repeater嵌套绑定方法(2)
    asp.net asp:Repeater嵌套绑定方法(1)
    listview 绑定hashtable 以及值的显示
    mark
    程序员的路该怎么样继续走下去?
    多条件查询以及分页存储过程(倒叙和顺序查询)
    发生ActionScript 错误:[RPC Fault faultString="发送失败" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed
  • 原文地址:https://www.cnblogs.com/hinanawitenshi/p/7684112.html
Copyright © 2020-2023  润新知