| 层级 | a | b | q = ⌊a/b⌋ | r = a mod b | 状态 |
|---|
计算完成!最大公约数 (gcd) 和一组 Bézout 系数 (x, y) 如下:
Bézout 恒等式 ax + by = d 可以看作是两个向量 (a, 0) 和 (0, b) 的线性组合,通过整数系数 x 和 y 缩放并相加,最终可以构造出表示最大公约数 d 的某种形式(例如向量 (d, ...) 或表示长度为 d 的线段)。下图尝试展示这种关系。
Bézout 方程的通解形式
扩展欧几里得算法找到的是方程 ax + by = d (其中 d = gcd(a, b)) 的一组特解 (x₀, y₀)。
该方程实际上有无穷多组整数解,其通解形式为:
其中 k 可以是任意整数 (k ∈ ℤ)。
这表明所有整数解在二维平面上构成一系列等距分布的点,它们都落在直线 ax + by = d 上。
💡模乘法逆元
当我们需要求解 ax ≡ 1 (mod m) 中的 x 时(要求 gcd(a, m) = 1),这等价于求解线性丢番图方程 ax + my = 1。
使用扩展欧几里得算法计算 a 和 m,得到 ax' + my' = 1。此时得到的 x' 就是 a 模 m 的一个乘法逆元。最终结果可能需要调整到 [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)。