递归展开过程 (欧几里得算法)
参数变化表格
层级 a b q = ⌊a/b⌋ r = a mod b 状态
回溯求解 Bézout 系数 (x, y)
最终解

计算完成!最大公约数 (gcd) 和一组 Bézout 系数 (x, y) 如下:

Bézout 恒等式的几何直观

Bézout 恒等式 ax + by = d 可以看作是两个向量 (a, 0)(0, b) 的线性组合,通过整数系数 xy 缩放并相加,最终可以构造出表示最大公约数 d 的某种形式(例如向量 (d, ...) 或表示长度为 d 的线段)。下图尝试展示这种关系。

Bézout 方程的通解形式

扩展欧几里得算法找到的是方程 ax + by = d (其中 d = gcd(a, b)) 的一组特解 (x₀, y₀)

该方程实际上有无穷多组整数解,其通解形式为:

x = x₀ + k * (b / d),    y = y₀ - k * (a / d)

其中 k 可以是任意整数 (k ∈ ℤ)。

这表明所有整数解在二维平面上构成一系列等距分布的点,它们都落在直线 ax + by = d 上。

学习小贴士与应用场景

💡模乘法逆元

当我们需要求解 ax ≡ 1 (mod m) 中的 x 时(要求 gcd(a, m) = 1),这等价于求解线性丢番图方程 ax + my = 1

使用扩展欧几里得算法计算 am,得到 ax' + my' = 1。此时得到的 x' 就是 am 的一个乘法逆元。最终结果可能需要调整到 [0, m-1] 范围内,即 x = (x' % m + m) % m

⚠️常见误区

1. 回代公式混淆: 记住递归返回时,是基于下一层的解 (x₂, y₂) 来计算当前层的解 (x₁, y₁),公式为 x₁ = y₂, y₁ = x₂ - ⌊a/b⌋ * y₂

2. 符号处理: 回代过程中减法和负数系数要格外小心。

3. 基准情况: 递归基准是当 b = 0 时,gcd(a, 0) = a,此时 x = 1, y = 0,因为 a * 1 + 0 * 0 = a

🔧线性丢番图方程

对于一般形式的方程 ax + by = c,它有整数解的充要条件是 gcd(a, b) 能够整除 c (即 c % gcd(a, b) == 0)。

如果满足条件,可以先用 ExGCD 求出 ax' + by' = d (其中 d = gcd(a, b)) 的一组解 (x', y')。然后,将整个方程两边同乘以 c / d,得到:a * (x' * c/d) + b * (y' * c/d) = d * (c/d) = c。因此,原方程的一组特解是 x = x' * (c/d), y = y' * (c/d)