EXGCD 算法 / 二元一次不定方程 学习笔记
扩展欧几里德算法
扩展欧几里德算法是一种用于求出形如 \(ax+by=\gcd(a,b)\) 的二元一次不定方程的一组特解的算法。
根据辗转相除法,有
假设我们已经求出了 \(bx+\left(a-\left\lfloor\frac ab\right\rfloor b\right)y=\gcd\left(b,a-\left\lfloor\frac ab\right\rfloor b\right)\) 的一组特解 \(x_0, y_0\),那么就有
那么 \(x=y_0,y=\left(x_0-\left\lfloor\frac ab\right\rfloor y_0\right)\) 便是满足条件的一组特解。
边界条件不难想。
裴蜀定理
若 \(a,b\) 是整数,且 \(\gcd(a,b)=d\),那么对于任意的整数 \(x,y\),\(ax+by\) 都一定是 \(d\) 的倍数,特别地,一定存在整数 \(x,y\),使 \(ax+by=d\) 成立。 ——百度百科
也就是说二元一次不定方程 \(ax+by=c\) 有解的充要条件是 \(\gcd(a,b)|c\)。
解二元一次不定方程
对于一个二元一次不定方程 \(ax+by=c\),根据裴蜀定理可以先判除无解的情况。否则可以利用 EXGCD 求出其一组特解。
利用 EXGCD,我们可以求出 \(ax+by=\gcd(a,b)\) 的一组特解 \(x',y'\),然后得到 \(ax+by=c\) 的一组特解 \(x_0=x'\cdot\frac c{\gcd(a,b)},y_0=y'\cdot\frac c{\gcd(a,b)}\)。
然后就可以通过这一对特解来构造通解。通解一定满足 \(x=x_0+kbd,y=y_0+kad\) 的形式。我们需要令 \(d\) 最小,且满足 \(ad\) 和 \(bd\) 均为整数。那么 d 就可以取 \(\frac1{\gcd(a,b)}\)。这样我们就构造出了方程 \(ax+by=c\) 的通解。
求逆元
求 \(a\) 在模 \(p\) 意义下的乘法逆元(要求 \(a\) 与 \(p\) 互质)。
即求 \(ax\equiv 1\pmod p\) 的最小正整数解。将同余方程转化为 \(ax+py=1\),然后取所有解中最小的正整数 \(x\)(即求出方程的一组特解 \(x_0,y_0\),取 \(x_0\) 对 \(p\) 取模后的结果)。

浙公网安备 33010602011771号