zoukankan      html  css  js  c++  java
  • 扩展中国剩余定理(扩展CRT)详解

    今天在$xsy$上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面)

    中国剩余定理是用于求一个最小的$x$,满足$xequiv c_i pmod{m_i}$。

    正常的$CRT$有一个微小的要求,就是$forall i,j (m_i,m_j)=1$。

    在某些情况下,这个式子无法被满足,这个时候就要用扩展$CRT$来求解了。

    我们先假设我们只有两条方程要被求解,它们分别是:

    $egin{cases} xequiv c_1 pmod{m_1}\xequiv c_2 pmod{m_2}end{cases}$

    我们考虑将同余去掉,就变成了:

    $egin{cases} x= c_1+m_1k_1\x= c_2+m_2k_2end{cases}$

    联立一波,得:

    $c_1+m_1k_1=c_2+m_2k_2$

    $m_1k_1=(c_2-c_1)+m_2k_2$

    若该方程存在解,则有$(m1,m2)|(c_2-c_1)$,否则无解

    下面令$d=(m1,m2)$。

    我们对等式两边全部除以$d$,得:

    $dfrac{m_1}{d}k_1=dfrac{c_2-c_1}{d}+dfrac{m_2}{d}k_2$

    经过简单变式,得:

    $dfrac{m_1}{d}k_1equiv dfrac{c_2-c_1}{d} pmod{dfrac{m_2}{d}}$

    没错,我们成功消掉了$k_2$

    我们将$dfrac{m_1}{d}$移项到等式右侧,得:

    $k_1 equiv inv(dfrac{m1}{d},dfrac{m_2}{d}) imes dfrac{c_2-c_1}{d} pmod{dfrac{m_2}{d}}$

    其中$inv(x,y)$表示模$y意$义下$x$的乘法逆元

    重新将该式子变回等式,得:

    $k_1 = inv(dfrac{m1}{d},dfrac{m_2}{d}) imes dfrac{c_2-c_1}{d} + ydfrac{m_2}{d}$

    该式子已经化简到尽了,考虑重新代入回最初的式子。

    将$k_1$代入$x=c_1+m_1k$中,得:

    $xequiv inv(dfrac{m1}{d},dfrac{m_2}{d}) imes dfrac{c_2-c_1}{d} imes m1 +c_1 pmod{dfrac{m_1m_2}{d}}$

    至此,求两条式子的扩展$CRT$已经讲完了

    如果方程有多条怎么办:我们做$n-1$次的两条式子的$CRT$合并就可以了。

  • 相关阅读:
    561. Array Partition I
    448. Find All Numbers Disappeared in an Array
    136. Single Number
    485. Max Consecutive Ones
    463. Island Perimeter
    496. Next Greater Element I
    344. Reverse String
    【.net项目中。。】.net一般处理程序使用方法
    【ExtAspNet学习笔记】ExtAspNet控件库中常见问题
    用VS2010创建三层架构开发模式及三层架构的研究
  • 原文地址:https://www.cnblogs.com/xiefengze1/p/10350652.html
Copyright © 2011-2022 走看看