EXGCD 算法 / 二元一次不定方程 学习笔记

扩展欧几里德算法

扩展欧几里德算法是一种用于求出形如 \(ax+by=\gcd(a,b)\) 的二元一次不定方程的一组特解的算法。

根据辗转相除法,有

\[\begin{aligned} ax+by=&\gcd(a,b)\\ =&\gcd(b,a\bmod b)\\ =&\gcd\left(b,a-\left\lfloor\frac ab\right\rfloor b\right) \end{aligned} \]

假设我们已经求出了 \(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\),那么就有

\[\begin{aligned} ax+by=&bx_0+\left(a-\left\lfloor\frac ab\right\rfloor b\right)y_0\\ =&ay_0+b\left(x_0-\left\lfloor\frac ab\right\rfloor y_0\right) \end{aligned} \]

那么 \(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\) 取模后的结果)。

posted @ 2022-01-12 21:52  e3c8f1a924  阅读(285)  评论(0)    收藏  举报