Exgcd 和 Excrt 的一些推导
Exgcd 和 Excrt 的一些推导
Exgcd
Exgcd 是用来求解二元一次不定方程的算法,即
根据贝祖定理,该方程有解当且仅当 \(\gcd(a,b) \mid c\),所以只用求解
又因为
可以先求解
变形得
对比方程 \(ax+by=\gcd(a,b)\),得
在递归求 \(\gcd(a,b)\) 时顺便求出 \(x,y\) 即可。
对于方程 \(ax+by=c\) 的一组特解 \(x_0,y_0\),其通解可表示为
而 Exgcd 求出的是 \(ax+by=\gcd(a,b)\) 的一组特解 \(x_0,y_0\)。
记 \(d=\gcd(a,b)\),方程 \(ax+by=c\) 的通解可表示为
也可表示为
这样我们可以求出 \(x,y\) 的最小正整数值。
Exgcd 还可以用来求解线性同余方程,即
可转化为二元一次不定方程
使用 Exgcd 求解即可。
Excrt
Excrt 是用来求解线性同余方程组的算法,即
考虑已经求解出前 \(k-1\) 个方程组,如何与第 \(k\) 个方程合并。
记 \(x_0\) 为前 \(k-1\) 个方程组的解,\(M=\text{lcm}_{i=1}^{k-1} m_i\),\(x\) 为前 \(k\) 个方程组的解,有
代入原方程,有
移项得
变为线性同余方程,可以使用 Exgcd 求解出 \(t\) 的最小正整数解。
若该线性同余方程无解,则整个方程组无解。
将 \(t\) 代入原式求出 \(x\),将 \(x_0 \leftarrow x\),\(M \leftarrow \text{lcm}(M,m_k)\)。
这样就完成了一次合并。
依次将 \(n\) 个方程合并,就求出了整个方程组的解。
本文来自博客园,作者:maniubi,转载请注明原文链接:https://www.cnblogs.com/maniubi/p/18414376,orz