2018haha's Blog
It just happens and we should live with it.

中国剩余定理是$\text{OI}$中较为基础却常用的数论算法之一。而扩展中国剩余定理作为扩展,解决的问题较中国剩余定理广。本文将介绍扩展中国剩余定理相关内容。

前言

中国剩余定理是$\text{OI}$中较为基础却常用的数论算法之一。而扩展中国剩余定理作为扩展,解决的问题较中国剩余定理广。本文将介绍扩展中国剩余定理相关内容。

  • 前置知识:扩展欧几里得($\text{Exgcd}$)

扩展中国剩余定理

要解决的问题

扩展中国剩余定理要解决的问题是求解线性模方程组。

已知如下$k$个模意义下的方程,求$x$的最小非负整数解。

$\left{\begin{aligned}x\equiv\ a_1(\mod m_1) \quad\ x\equiv\ a_2(\mod m_2) \quad\ x\equiv\ a_3(\mod m_3) \quad\ …\quad\x\equiv\ a_k(\mod m_k) \quad\end{aligned}\right.$

整体思路

扩展中国剩余定理解决此问题的大体思路是将方程依次合并。具体来说,对任意两个方程合并,之后继续做下去,直到剩下一个方程。这样方程组就可以变成一个同余方程,可以用$\text{Exgcd}$解出最小的非负整数$x$。而现在的关键问题就是:如何将两个同余方程合并成一个。

合并同余方程的证明过程

现在只需考虑合并两个方程。假设这两个方程如下:

$$\left{\begin{aligned}x\equiv\ a_1(\mod m_1) \quad\ x\equiv\ a_2(\mod m_2) \quad\end{aligned}\right.$$

也就是:

$$\left{\begin{aligned}x=a_1+k_1m_1 \ x=a_2+k_2m_2\end{aligned}\right.$$

所以:

$$a_1+k_1m_1=a_2+k_2m_2$$

移项得:

$$k_1m_1-k_2m_2=a_2-a_1$$

目前方程的形式很类似$\text{Exgcd}$可解的方程形式:

$$ax+by=\text{gcd}(x,y)$$

而$a_2-a_1$不一定等于$\text{gcd}(m_1,m_2)$,不能直接用$\text{Exgcd}$求解。

但我们可以解出如下方程$k_1’,k_2’$的解:

$$k_1’m_1+k_2’m_2=\text{gcd}(m_1,m_2)$$

注意,这里解得的$k_1’,k_2’$的解有多组。

将这个方程两边乘上$\frac{a_2-a_1}{\text{gcd}(m_1,m_2)}$就是我们要解的方程,所以方程的解为:

$$\left{\begin{aligned}k_1=k_1’* \frac{a_2-a_1}{\text{gcd}(m_1,m_2)}\ k_2=-k_2’* \frac{a_2-a_1}{\text{gcd}(m_1,m_2)}\end{aligned}\right.$$

将方程的解代回到最初的方程

$$\left{\begin{aligned}x=a_1+k_1m_1 \ x=a_2+k_2m_2\end{aligned}\right.$$

中,可得:

$$\left{\begin{aligned}x=a_1+k_1’* \frac{a_2-a_1}{\text{gcd}(m_1,m_2)}m_1 \ x=a_2-k_2’ \frac{a_2-a_1}{\text{gcd}(m_1,m_2)}*m_2\end{aligned}\right.$$

由于$k_1’,k_2’$有多组解,这样的$x$会有多种取值,而不同取值之间成等差,差既是$\frac{a_2-a_1}{\text{gcd}(m_1,m_2)}m_1 $的倍数,又是$\frac{a_2-a_1}{\text{gcd}(m_1,m_2)}m_2$的倍数。由此又可得出,差是$\frac{m_1*m_2}{\text{gcd}(m_1,m_2)}$的倍数,即$\text{lcm}(m_1,m_2)$的倍数。

因此:$x=k_1’m_1+x_1\text{lcm}(m_1,m_2)$

即可将两个同余方程

$$\left{\begin{aligned}x\equiv\ a_1(\mod m_1) \quad\ x\equiv\ a_2(\mod m_2) \quad\end{aligned}\right.$$

合并为

$$x\equiv k_1’*m_1+x_1(\mod (\text{lcm}(m_1,m_2)))$$

结论

将两个同余方程

$$\left{\begin{aligned}x\equiv\ a_1(\mod m_1) \quad\ x\equiv\ a_2(\mod m_2) \quad\end{aligned}\right.$$

合并为一个的步骤为:

1.求解

$$k_1’m_1+k_2’m_2=\text{gcd}(m_1,m_2)$$

中的$k_1’$。

2.合并后的方程为:

$$x\equiv k_1’*m_1+x_1(\mod (\text{lcm}(m_1,m_2)))$$


#### 感谢您的阅读,如果在阅读过程中发现问题,欢迎在下方评论区留言或QQ联系博主,谢谢! **注意:**文章版权遵循[署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh), 欢迎转载,请注明出处

 评论



博客内容遵循 [署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)
本站使用 Material X 作为主题 , 总访问量为 次 。