自顶向下整除分治递归,自底向上回溯反代求裴蜀系数
扩展欧几里得算法 (Extended Euclidean Algorithm) 在求最大公约数 $\gcd(a, b)$ 的同时,能找到一组整数解 $x, y$ 使得 $ax + by = \gcd(a, b)$。
设我们对 $a$ 和 $b$ 调用递归。若在下一层 `extGcd(b, a % b, x1, y1)` 已经求得了满足方程的特解 $x_1, y_1$:
已知 $a \bmod b = a - \lfloor a/b \rfloor \cdot b$。带入上式:
与原方程 $ax + by = d$ 对照系数,即可得到回溯的状态转移方程:
long long extGcd(long long a, long long b, long long &x, long long &y) {
if (b == 0) {
x = 1; y = 0;
return a;
}
long long x1, y1;
long long d = extGcd(b, a % b, x1, y1);
x = y1;
y = x1 - (a / b) * y1;
return d;
}