算法原理:
扩展欧几里得算法(Extended Euclidean Algorithm)不仅能计算两个整数 a 和 m 的最大公约数 gcd(a, m),
还能找到整数 x 和 y,使得 ax + my = gcd(a, m)。
这是贝祖等式(Bézout's identity)的一个应用。
算法步骤:
- 欧几里得算法:使用辗转相除法计算 gcd(a, m),记录每一步的商和余数
- 回代过程:从最后一步开始反向回代,逐步表示每个余数为 a 和 m 的线性组合
- 求解系数:最终得到系数 x 和 y,满足 ax + my = gcd(a, m)
模逆(Modular Inverse):
当 gcd(a, m) = 1 时(即 a 和 m 互质),存在 a 在模 m 下的乘法逆元,记作 a-1 mod m。
此时 x 即为模逆,满足 a × x ≡ 1 (mod m)。
如果 x 是负数,需要调整为正数:x' = x mod m。
应用场景:
- 密码学:RSA 算法中计算私钥,需要求模逆
- 数论问题:求解线性同余方程 ax ≡ b (mod m)
- 组合数学:计算组合数的模运算(Lucas 定理等)
- 竞赛编程:快速计算模逆,避免除法导致的精度问题
时间复杂度:
O(log min(a, m)),与欧几里得算法相同