zoukankan      html  css  js  c++  java
  • 中国剩余定理分析及扩展

    中国剩余定理(限制条件:模为两两互质)

    中国剩余定理其实很早我们都接触过,在初中甚至小学的时候我们都有可能看到过这样的问题:有n个东西,三个人分剩两个,五个人分剩三个,七个人分剩两个,求n最少是多少。

    求解这个问题古人就已经想到了很好的解决办法。

    我们由题意易知:

    x=2(mod)3;

    x=3(mod)5;

    x=2(mod)7;

    如果x=n1+n2+n3。

    n1是5,7的倍数,且n1%3=2。

    n2是3,7的倍数,且n2%5=3。

    n3是3,5的倍数,且n3%7=2。

    故我们可以知道n1+n2+n3定是x的一个解。

    那么怎么求n1,n2,n3呢?

    我们由逆元知道。

    (5*7)*inv(5*7,3)=1(mod)3;

    (3*7)*inv(3*7,  5)  =  1(mod)5;

    (3*5)*inv(3*5,  7)  =  1(mod)7;

    故n1=2*5*7*inv(5*7,3),n2=3*3*7*inv(3*7,  5),n3=2*3*5*inv(3*5,  7) 

    因为,中国剩余定理的模都是两两互质,必有逆元。用扩展欧几里得算法就可以求解,于是我们最后将求得的n1,n2,n3相加,最后的答案就是n=(n1+n2+n3)mod(lcm(3,5,7))。

    扩展中国剩余定理:(求解模数不互质情况下的线性方程组)

    注意:这种情况不一定有解。

    这种情况就采用两两合并的思想,假设要合并如下两个方程:

      那么得到:

      我们需要求出一个最小的x使它满足:

      那么x1x2就要尽可能的小,于是我们用扩展欧几里得算法求出x1的最小正整数解,(判断是否方程组有解,就在于(a2-a1)%gcd(m1,m2)是否等于0,如果等于0有解,否则无解)将它代回a1+m1x1,得到x的一个特解x′,当然也是最小正整数解。(为了防止特解大于lcm(m1,m2)。取模lcm(m1,m2))

      所以x的通解一定是x′加上lcm(m1,m2)∗k,这样才能保证x模m1和m2的余数是a1和a2。由此,我们把这个x′当做新的方程的余数,把lcm(m1,m2)当做新的方程的模数。(这一段是关键

      合并完成:

    ps:个人觉得扩展中国剩余定理和中国剩余定理的区别在于

    1、扩展可能无解,互质一定有解。

    2、扩展用到了同余方程组合并的思想。而中国剩余定理只是单纯的求解逆元。虽然两者的求法都是用exgcd来求解,但是还是有区别点的。

     

  • 相关阅读:
    Usb key插入检测,并动态获取CSP
    PsGetVersion
    BCDEDIT 启动配置数据存储编辑器
    fatal error LNK1103: debugging information corrupt; recompile module 解决
    Smart Card(windows)
    findwindow 后postmessage点解按钮
    核心层API分类
    64位下SetWindowLong时的参数GWL_WNDPROC undeclared identifier未定义的错误
    安装SQL SERVER 2008时出现了SQL SERVER 2005 Express Tool Installed 的错误
    win7重置密码的方法
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/8418241.html
Copyright © 2011-2022 走看看