『笔记』中国剩余定理(CRT)

定义

中国剩余定理(Chinese Remainder Theorem, CRT)可求解如下形式的一元线性同余方程组(其中 \(w_1,w_2,w_3……w_n\) 两两互质):

\[\begin{cases} x\equiv b_1\ \ (\bmod w_1) \\x \equiv b_2 \ \ (\bmod w_2)\\x \equiv b_3 \ \ (\bmod w_3)\\x \equiv b_4 \ \ (\bmod w_4) \\ …… \\x \equiv b_n \ \ (\bmod w_n) \end{cases}\]

然而这个东西相对于同样可以解决这个问题的\(excrt\) 有着很大的限制,所以在这里并不做过多说明

应用

还是上面的方程组,求满足这个方程组的最小非负整数解 \(x\)

假设\(M=\prod_{i=1}^{k-1} \ \ lcm(w_i,M)\)

首先我们已经假设求出了前 \(k-1\) 个方程的解 \(x_0\) ,那么前 \(k-1\) 个方程的通解即为

\[x_0+i\times M \ \ (i\in Z) \]

那么现在引入第 \(k\) 个方程

那么也就是找出一个正整数 \(t\) 使得

\[x_0+t\times M\equiv b_i\ \ (\bmod w_k) \]

成立

移项可以得到

\[t\times M\equiv b_i-x_0\ \ (\bmod w_k) \]

那么这个方程可以用扩欧求得解 \(t\)

此时的答案 \(x\) 即为 $x_0+t \times M $

实现

注:该实现仅代表本人的一点见解,由于初学,知识浅薄,仅能理解到表面,如有差错请指出

首先可以把\(M=m_1,x=b_1\)用第一个方程作为基层来一步步求得后面的方程

当我们通过扩欧求得的 \(t\) 的时候,此时我们是求得的方程原型为

\[t\times M+y\times w_k=gcd(M,w_k) \]

要想进一步求得真正的 \(t\) 还要乘上 \(c/gcd(M,w_k)\)才可以,并且此时的模数可以为 \(b\),应用龟速乘进行求解即可

然后更新\(M=M\times w_k/gcd(M,w_k)\)

直到完成为止

代码

完整代码OVO,请食用

posted @ 2021-01-08 09:15  琼瑾  阅读(110)  评论(0编辑  收藏  举报
Live2D