中国剩余定理

中国剩余定理

一、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;
}
posted @ 2025-11-22 18:40  Red_river_hzh  阅读(15)  评论(0)    收藏  举报