中国剩余定理
中国剩余定理
一、CRT基本内容
中国剩余定理,Chinese Remainder Theorem,又称孙子定理,给出了一元线性同余方程组的有解判定条件,并用构造法给出了通解的具体形式。
\[\begin{cases}
x \equiv a_1 \pmod{m_1} \\\\
x \equiv a_2 \pmod{m_2} \\\\
\vdots \\\\
x \equiv a_n \pmod{m_n}
\end{cases}\]
其中,$$(m_1, m_2, \ldots, m_n)$$ 两两互质。
设 $$(M = \prod_{i=1}^n m_i)$$,且 $$(M_i = M/m_i)$$。
\[w_i \equiv M_i^{-1} \pmod{m_i}
\]
则方程的通解为:
\[x = \sum_{i=1}^n a_i w_i M_i + kM \quad (k \in \mathbb{Z})
\]
二、CRT推导过程
假设考虑如下 (n) 条同余式方程:
\[\begin{aligned}
y_1 &\equiv a_1 \pmod{m_1} \\
y_2 &\equiv a_2 \pmod{m_2} \\
&\vdots \\
y_n &\equiv a_n \pmod{m_n}
\end{aligned}\]
如果存在 $$(x_0 = \sum_{i=1}^n y_i)$$ 为方程组的一个特解,考虑 $$(y_i)$$ 的条件。
现研究第 $$(t)$$ 项方程,根据假设有:
\[y_t \equiv x \equiv \sum_{i=1}^n y_i \equiv a_t \pmod{m_t}
\]
且对于 $$(i \neq t)$$,有 $$(y_i \equiv 0 \pmod{m_t})$$。
令 $$(M = \prod_{i=1}^n m_i)$$,并令 $$(M_i = \frac{M}{m_i})$$。
令 $$(y_t = M_t \cdot z_t)$$,考虑 $$(z_t)$$ 的取值,使得 $$(y_t \equiv a_t \pmod{m_t})$$ 成立。
Page 2
\[y_t = M_t \cdot z_t \equiv a_t \pmod{m_t}, \quad \gcd(M_t, m_t) = 1\]
\[\exists w_t \text{ 使得 } w_t \cdot M_t \equiv 1 \pmod{m_t}\]
\[z_t \equiv a_t \cdot w_t \pmod{m_t}, \quad \text{令 } z_t = a_t \cdot w_t
\]
\[y_t = a_t \cdot M_t \cdot w_t
\]
\[x_0 = \sum_{i=1}^n y_i = \sum_{i=1}^n a_i \cdot M_i \cdot w_i
\]
可作为同余方程组的一个特解。
由于 $$(m_i \mid M)$$,所以:
\[x = x_0 + kM \quad (k \in \mathbb{Z})
\]
可作为同余方程组的通解,即:
\[x = kM + \sum_{i=1}^n a_i \cdot M_i \cdot w_i \quad (k \in \mathbb{Z})
\]
三、扩展CRT基本内容
解决同余方程组中 $$(m_1, m_2, \ldots, m_n)$$ 可不互质的问题。
考虑合并两个方程组:
\[\begin{cases}
x \equiv a_1 \pmod{m_1} \\
x \equiv a_2 \pmod{m_2}
\end{cases}
\]
化成等式方程组:
\[\begin{cases}
x = a_1 + p \cdot m_1 \\
x = a_2 + q \cdot m_2
\end{cases}
\]
得:
\[p \cdot m_1 - q \cdot m_2 = a_2 - a_1
\]
有解的条件为:
\[\gcd(m_1, m_2) \mid a_2 - a_1
\]
用扩展 (GCD) 求出 (p, q) 的通解为:
\[\begin{cases}
p = p_0 + \frac{m_2}{\gcd(m_1, m_2)} \cdot k \\
q = q_0 + \frac{m_1}{\gcd(m_1, m_2)} \cdot k
\end{cases}
\quad (k \in \mathbb{Z})
\]
因此 (x) 的通解为:
\[x = a_1 + p \cdot m_1 = a_1 + \left(p_0 + \frac{m_2}{\gcd(m_1, m_2)} \cdot k\right) \cdot m_1
\]
\[= a_1 + p_0 \cdot m_1 + \frac{m_1 m_2}{\gcd(m_1, m_2)} \cdot k
\]
\[= x_0 + k \cdot \mathrm{lcm}(m_1, m_2)
\]
等价于:
\[x \equiv x_0 \pmod{\mathrm{lcm}(m_1, m_2)}\]
ExCRT() {
M = m[1], X = a[1], p, q, d, t, c;
for (int i = 2; i <= n; i++) {
c = ((a[i] - X) % m[i] + m[i]) % m[i];
d = Exgcd(M, m[i], p, q);
if (c % d) return -1; // 无解
t = m[i] / d;
p = mul(p, c / d, t); // 求 p 的最小正整数解
X += M * p;
M *= t; // M = lcm(M, m[i])
X = (X % M + M) % M;
}
X = (X % M + M) % M;
return X;
}
本文来自博客园,作者:Red_river_hzh,转载请注明原文链接:https://www.cnblogs.com/Red-river-hzh/p/19258338

浙公网安备 33010602011771号