Loading

[笔记] 扩展欧几里得算法

常用于求解 \(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)}\)

posted @ 2022-03-18 17:22  IrisT  阅读(16)  评论(0编辑  收藏  举报