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\)

  • 相关阅读:
    【Java并发】并发笔记(一)
    【深入Java基础】排序算法(一)
    QDU-GZS and String
    牛客网36-A,B题解
    QDU-GZS与素数大法(素数筛法)
    csdn自动展开+去广告+净化剪切板+免登陆(如有侵权,立即删博)
    QDU第一届程序设计大赛——E到I题解法(非官方题解)
    Codeforces Round #529 -C- Powers Of Two(二进制拆分)
    CodeForces
    分配物资(模拟)
  • 原文地址:https://www.cnblogs.com/redegg/p/11746861.html
Copyright © 2011-2022 走看看