拓展欧几里得除法用于求解整数线性方程 的一组解,同时可以用来求模逆元(当 a 和 b 互质时,)。
迭代公式的理解
在扩展欧几里得算法中,递归地利用普通欧几里得算法的步骤并通过回溯计算满足等式的整数解。以下是关键公式的推导与直观解释:
-
余数表达:
在欧几里得算法中,每一步将较大的数分解为较小数的倍数加余数。
-
递归形式:
展开得:
化简后得:
-
递归基和回溯: 当 b=0b = 0 时:
递归的每一步根据上述公式计算 ,最终通过回溯构造出完整的解。
应用到逆元的场景
模逆元定义为满足 的整数 xx。可以将其转化为:
即在扩展欧几里得算法的解中,模逆元为 。
示例代码
以下是基于上述原理的代码实现:
void exgcd(long long a, long long b, long long &x, long long &y) {
if (b == 0) {
x = 1, y = 0;
return;
}
exgcd(b, a % b, y, x);
y -= a / b * x;
}
求模逆元的调用可以类似这样:
long long modInverse(long long a, long long p) {
long long x, y;
exgcd(a, p, x, y);
return (x % p + p) % p;
}