[笔记] 扩展欧几里得算法
常用于求解 \(ax+by=\gcd(a,b)\) 的一组可行解。
求解过程
现推比较简单:
\[\begin{aligned}
&bx'+(a\bmod b)y'=c\\
&bx'+(a-a / b\cdot b)y'=c\\
&ay'+b(x'-a/b\cdot y')=c\\
\\
&故\ x = y',\ y = x'-a/b\cdot y'
\end{aligned}
\]
void Exgcd(LL a, LL b, LL &x, LL &y){
if(!b){ x = 1, y = 0; return; }
Exgcd(b, a % b, x, y);
LL t = x; x = y, y = t - a / b * y;
}
注意事项
- \(a,b,c\) 的正负无所谓,但是注意如果求得 \(ax+by=-c\),将 \(x,y\) 取反。
- 解出的 \(|x_0|\le b,|y_0|\le a\),但是中间结果不一定满足该限制。
- \(x=x_0+k\cdot \dfrac{b}{\gcd(a,b)},y=y_0-k\cdot \dfrac{a}{\gcd(a,b)}\)