zoukankan      html  css  js  c++  java
  • 中国剩余定理

    CRT

    \(f(x)=\left\{ {\begin{array}{}x\equiv a_1(mod\ m_1)\\x\equiv a_2(mod\ m_2)\\\cdots\\x\equiv a_n (mod\ m_n)\end{array}} \right.\)

    任意两个\(m_i\)互质,求\(x\)

    \(rem=\prod_1^nm_i\),得\(gcd(m_i,\frac{rem}{m_i})=1\)

    \(k\)\(k\)满足:

    \(k\times \frac{rem}{m_i} \%m_i=1\)

    得:

    \(k\times \frac{rem}{m_i} \% m_j = \left\{ {\begin{array}{}1(i=j)\\0(i\ne j)\end{array}} \right.\)

    那么得:

    \(a_i\times k\times \frac{rem}{m_i} \% m_j = \left\{ {\begin{array}{}a_i(i=j)\\0(i\ne j)\end{array}} \right.\)

    \(k\)\(\frac{rem}{m_i}\)逆元。

    答案:\(x=\sum _1^n a_i \times k \times \frac{rem}{m_i}\)

    exCRT

    我们现在,去除掉\(m_i\)互质的条件。

    在这种情况下,是有可能无解的。

    我们选取第\(1,2\)\(x\equiv a_i(mod\ m_i)\)

    \(x=a_i+m_i\times k_i\)

    有:\(a_1+m_1 \times k_1=a_2+m_2\times k_2=\cdots=x\)

    \(m_1\times k_1-m_2\times k_2=a_2-a_1\)

    两边同除以\(gcd(m_1,m_2)\)

    得:

    \(\frac{m_1\times k_1}{gcd(m_1,m_2)}-\frac{m_2\times k_2}{gcd(m_1,m_2)}=\frac{a_2-a_1}{gcd(m_1,m_2)}\)

    我们现在简写\(gcd(m_1,m_2)\)\(gcd\)

    易得,因为等式左边是整数,若右边无法整除,则无解。

    那么现在等式为:

    \(\frac{m_1}{gcd}\times k1-\frac{m_2}{gcd}\times k2=\frac{a_2-a_1}{gcd}\)

    可以知道\(\frac{m_1}{gcd}\)\(\frac{m_2}{gcd}\)互质。

    则现在设\(q\)\(p\)。根据裴蜀定理。

    有:\(\frac{m_1}{gcd}\times p+\frac{m_1}{gcd}\times q = 1\)

    \(p\)\(q\)通过扩展欧几里得(\(exgcd\))求出。

    \(k_1=p\times \frac{a_2-a_1}{gcd},k_2=q\times \frac{a_2-a_1}{gcd}\)

    那么我们现在得到了一二组的解,我们将一二组合并为一组:新的一组的

    \(a=k_1\times m_1+a_1\)

    \(m=lcm(m_1,m_2)\)

    \(a\)就是\(1,2\)组的答案,并且这个最小的非负数答案一定不会超过\(m\)

    以此类推。

    最后\(x\)的答案就是合并所有组后的\(a\)

  • 相关阅读:
    IE8及其以下浏览器边框圆角兼容问题
    关于git的一些指令及遇到的问题和解决方法
    vue项目环境搭建及运行
    webpack中的重要功能
    webpack 的重要功能
    c++ stl sort 自定义排序函数cmp要遵循 strict weak ordering
    spring boot 包jar运行
    windows上传文件到linux云服务器上
    最少硬币数目的问题
    leetcode 415 两个字符串相加
  • 原文地址:https://www.cnblogs.com/redegg/p/11746861.html
Copyright © 2011-2022 走看看