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

定义

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

[egin{cases} xequiv b_1 (mod w_1) \x equiv b_2 (mod w_2)\x equiv b_3 (mod w_3)\x equiv b_4 (mod w_4) \ …… \x equiv b_n (mod 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 imes M (iin Z) ]

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

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

[x_0+t imes Mequiv b_i (mod w_k) ]

成立

移项可以得到

[t imes Mequiv b_i-x_0 (mod w_k) ]

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

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

实现

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

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

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

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

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

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

直到完成为止

代码

完整代码OVO,请食用

原文地址:https://www.cnblogs.com/1123LXY/p/14249866.html