exgcd

裴蜀定理:

方程 \(ax + by = gcd(a, b)\) 一定有解。
即证,\(ax \equiv 1 \pmod b\)
根据引理:在 \(x\)\(0 \le x \le b\) 再模 \(b\) 后,产生的集合为 {0, 1, 2, ···, b}。(可以反证)即可证明。

\(\,\)

扩展欧几里得(exgcd):

解方程:ax + by = d,其中 d = gcd(a, b)
设 a = kb + r

\[\begin{aligned} ax + by = d \\ (kb + r)x + by = d \\ b(kx + y) + rx = d \end{aligned} \]

可以看出这是个可以递推下去的式子,那我们可以先假设我们已经知道了上面方程的解 kx + y = y', x = x'
所以代回原方程,x = x', y = y' - kx'

代码:

ll exgcd(ll a, ll b, ll &x, ll &y) {
	ll d = a;
	if (!b)x = 1, y = 0; //y 随便取一个值就行
	else d = exgcd(b, a % b, y, x), y -= a / b * x;
	return d;
}
posted @ 2025-02-28 20:53  今添  阅读(35)  评论(0)    收藏  举报