扩展欧几里得
2026/10/1大约 2 分钟
扩展欧几里得
扩展欧几里得算法用于计算同余方程 中的 ,即求解 使得 是 的倍数。以下是详细的计算步骤。
步骤 1:计算最大公约数
首先,需要计算 和 的最大公约数 。如果 ,则说明 和 互素,存在解;否则无法解出 。
步骤 2:使用扩展欧几里得算法
扩展欧几里得算法用于求解线性方程:
其中, 就是我们需要找到的私钥指数。
扩展欧几里得算法步骤:
初始化: 给定 和 ,目标是找到 和 。
迭代步骤:使用欧几里得算法递归计算最大公约数,并逐步得到 和 的值。
反向代入:从最后的余数开始反推,得到系数 和 。
示例
假设我们要解以下方程:
计算 :
使用欧几里得算法:
因为 ,可以继续。
反向代入:
从最后的余数开始反推:
所以,。
将 转换为正数:
因此,,这是满足 的解。
代码示例(Python)
def extended_gcd(a, b):
if b == 0:
return a, 1, 0
gcd, x1, y1 = extended_gcd(b, a % b)
x = y1
y = x1 - (a // b) * y1
return gcd, x, y
def mod_inverse(e, phi_n):
gcd, x, y = extended_gcd(e, phi_n)
if gcd != 1:
raise Exception('No modular inverse exists')
else:
return x % phi_n
# 示例:求解 d * 7 ≡ 1 (mod 40)
e = 7
phi_n = 40
d = mod_inverse(e, phi_n)
print(f"d = {d}")