LOADING

正在加载,请稍候

扩展欧几里得

扩展欧几里得用于求解形如 ax+by=max+by=m 的不定方程,也常用于求逆元。

裴蜀定理

对于任意整数 a,ba,b,方程

ax+by=max+by=m

有整数解的充要条件是:

gcd(a,b)m\gcd(a,b) \mid m

因此可以先求出 ax+by=gcd(a,b)ax+by=\gcd(a,b) 的一组解,再按比例扩展到一般的 mm

递归推导

因为:

gcd(a,b)=gcd(b,amodb)\gcd(a,b)=\gcd(b,a\bmod b)

假设递归下一层已经求出:

bx2+(amodb)y2=gcd(a,b)bx_2+(a\bmod b)y_2=\gcd(a,b)

又因为:

amodb=aabba\bmod b=a-\left\lfloor \frac{a}{b}\right\rfloor b

代入可得:

bx2+(aabb)y2=gcd(a,b)bx_2+\left(a-\left\lfloor \frac{a}{b}\right\rfloor b\right)y_2=\gcd(a,b)

整理系数:

ay2+b(x2aby2)=gcd(a,b)ay_2+b\left(x_2-\left\lfloor \frac{a}{b}\right\rfloor y_2\right)=\gcd(a,b)

所以当前层的一组解为:

x1=y2,y1=x2aby2x_1=y_2, \quad y_1=x_2-\left\lfloor \frac{a}{b}\right\rfloor y_2

递归终点是 b=0b=0,此时:

a1+b0=aa\cdot 1+b\cdot 0=a

从终点向上回代,就能得到最终的 x,yx,y

求逆元

若要求 aa 在模 mm 意义下的逆元,即:

ax1(modm)ax \equiv 1 \pmod m

可以转化为:

ax+my=1ax+my=1

只要 gcd(a,m)=1\gcd(a,m)=1,就可以用扩展欧几里得求出 xx,再把 xx 调整到 [0,m)[0,m) 范围内即可。