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;
}

浙公网安备 33010602011771号