• 中国剩余定理学习笔记


    I.CRT(中国剩余定理)

    中国剩余定理:

    已知方程

    \[\begin{cases}x\equiv a_1\pmod{m_1}\\\vdots\\x\equiv a_n\pmod{m_n}\end{cases} \]

    则我们设\(M=\prod\limits_{i=1}^nm_i,M_i=\dfrac{M}{m_i},b_i=(M_i)^{-1}\pmod{m_i}\)

    则有

    \[\boxed{x\equiv\sum\limits_{i=1}^na_iM_ib_i\pmod M} \]

    很明显常规CRT只能在 \(m_i\) 全部互质的情形下使用,不然 \(b_i\) 不一定存在。

    下面证明CRT:

    类比拉格朗日插值,我们考虑找到一个式子,其模 \(m_1\)\(1\),模 \(m_{2\sim n}\) 均为 \(0\)。这样,其 \(a_1\) 倍就是仅模 \(m_1\)\(a_1\) 的数。对所有 \(a_i\) 都做上述操作并求和,就得到了符合条件的数。

    因为 \(m_i\) 两两互质,所以模 \(m_{2\sim n}\) 均为 \(0\) 唯一等价于模 \(\prod\limits_{i=2}^nm_i\)\(0\),也即上文中的 \(M_1\)

    我们设找到的这个式子为 \(kM_1\),则应有 \(kM_1\equiv1\pmod{m_1}\)。明显,其等价于 \(k\)\(M_1\) 在模 \(m_1\) 意义下的逆元,也即上文中的 \(b_1\)


    这个方程的\(n=2,3\)的特例可以用来做任意模数NTT:

    \[\begin{cases}x\equiv a\pmod{A}\\x\equiv b\pmod{B}\end{cases} \]

    则有

    \[x=a+\alpha A=b+\beta B \]

    于是

    \[a+\alpha A\equiv b\pmod B \]

    所以

    \[\alpha\equiv\dfrac{b-a}{A}\pmod B \]

    求出\(\alpha\)后,就有\(x\equiv a+\alpha A\pmod{AB}\)

    如果我们又有一个方程\(x\equiv c\pmod C\)

    就直接联立出方程

    \[\begin{cases}x\equiv a+\alpha A\pmod{AB}\\x\equiv c\pmod C\end{cases} \]

    因为卷积的值域是\(n^3\)的,所以双模就可以支持\(10^6\)的模数,而三模则可以支持常规的\(10^9\)模数。

  • 相关阅读:
    【ZOJ2112】【整体二分+树状数组】带修改区间第k大
    【POJ2104】【整体二分+树状数组】区间第k大
    【清澄A1333】【整体二分+二维树状数组】矩阵乘法(梁盾)
    【BZOJ2752】【线段树】高速公路
    【POJ2886】【线段树】Who Gets the Most Candies?
    【POJ2482】【线段树】Stars in Your Window
    【HDU4348】【主席树】To the moon
    JDBC
    java异常
    JavaScript对象
  • 原文地址:https://www.cnblogs.com/Troverld/p/14620885.html
Copyright © 2020-2023  润新知