Exgcd 和 Excrt 的一些推导

Exgcd 和 Excrt 的一些推导

Exgcd

Exgcd 是用来求解二元一次不定方程的算法,即

\[ax+by=c \]

根据贝祖定理,该方程有解当且仅当 \(\gcd(a,b) \mid c\),所以只用求解

\[ax+by=\gcd(a,b) \]

又因为

\[\gcd(a,b)=\gcd(b,a \bmod b) \]

可以先求解

\[bx'+(a\bmod b)y'=\gcd(a,b) \]

变形得

\[bx'+(a-b \lfloor \frac{a}{b}\rfloor)y' = \gcd(a,b) \]

\[ay'+b(x'-\lfloor\frac{a}{b}\rfloor y')=\gcd(a,b) \]

对比方程 \(ax+by=\gcd(a,b)\),得

\[\left \{ \begin{matrix} x=y'\\ y=x'-\lfloor\frac{a}{b}\rfloor y' \end{matrix} \right. \]

在递归求 \(\gcd(a,b)\) 时顺便求出 \(x,y\) 即可。

对于方程 \(ax+by=c\) 的一组特解 \(x_0,y_0\),其通解可表示为

\[\left \{ \begin{matrix} x=x_0+kb\\ y=y_0-ka \end{matrix} \right. \text{ }\text{ } (k\in\mathbb{Z}) \]

而 Exgcd 求出的是 \(ax+by=\gcd(a,b)\) 的一组特解 \(x_0,y_0\)

\(d=\gcd(a,b)\),方程 \(ax+by=c\) 的通解可表示为

\[\left \{ \begin{matrix} x=\frac{c}{d}x_0+\frac{b}{d}k \\ y = \frac{c}{d}y_0-\frac{a}{d}k \end{matrix} \right. \text{ } \text{ } (k \in \mathbb{Z}) \]

也可表示为

\[\left \{ \begin{matrix} x \equiv \frac{c}{d}x_0 \pmod{\frac{b}{d}}\\ y \equiv \frac{c}{d}y_0 \pmod{\frac{a}{d}} \end{matrix} \right. \]

这样我们可以求出 \(x,y\) 的最小正整数值。

Exgcd 还可以用来求解线性同余方程,即

\[ax \equiv b \pmod{m} \]

可转化为二元一次不定方程

\[ax+my=b \]

使用 Exgcd 求解即可。

Excrt

Excrt 是用来求解线性同余方程组的算法,即

\[\left \{ \begin{matrix} x \equiv a_1 \pmod{m_1}\\ x \equiv a_2 \pmod{m_2}\\ \dots \dots \dots \\ x \equiv a_n \pmod{m_n} \end{matrix} \right. \]

考虑已经求解出前 \(k-1\) 个方程组,如何与第 \(k\) 个方程合并。

\(x_0\) 为前 \(k-1\) 个方程组的解,\(M=\text{lcm}_{i=1}^{k-1} m_i\)\(x\) 为前 \(k\) 个方程组的解,有

\[x=x_0+tM \text{ } (t \in \mathbb{Z}) \]

代入原方程,有

\[x_0+tM \equiv a_k \pmod{m_k} \]

移项得

\[Mt\equiv a_k-x_0 \pmod{m_k} \]

变为线性同余方程,可以使用 Exgcd 求解出 \(t\) 的最小正整数解。

若该线性同余方程无解,则整个方程组无解。

\(t\) 代入原式求出 \(x\),将 \(x_0 \leftarrow x\)\(M \leftarrow \text{lcm}(M,m_k)\)

这样就完成了一次合并。

依次将 \(n\) 个方程合并,就求出了整个方程组的解。

posted @ 2024-09-14 17:12  maniubi  阅读(1)  评论(0编辑  收藏  举报