拓展欧几里得求逆元的例子
时间: 2025-05-29 07:51:10 浏览: 24
### 使用扩展欧几里得算法求逆元的示例
#### 理论背景
扩展欧几里得算法用于找到两个整数 \(a\) 和 \(b\) 的线性组合表示其最大公约数,即满足方程 \(ax + by = \text{gcd}(a, b)\)[^2]。当 \(a\) 和 \(b\) 互质时 (\(\text{gcd}(a, b) = 1\)),\(x\) 即为 \(a\) 模 \(b\) 的逆元。
以下是基于 Python 实现的一个具体例子:
---
#### 示例代码:求 \(5\) 模 \(26\) 的逆元
```python
def extended_gcd(a, b):
"""扩展欧几里得算法"""
if b == 0:
return a, 1, 0 # 当 b==0 时,返回 gcd(a, b)=a, x=1, y=0
else:
gcd, x1, y1 = extended_gcd(b, a % b)
x = y1
y = x1 - (a // b) * y1
return gcd, x, y
def find_mod_inverse(a, m):
"""寻找 a 模 m 的逆元"""
gcd, x, _ = extended_gcd(a, m)
if gcd != 1:
raise ValueError(f"No modular inverse exists for {a} mod {m}") # 如果不互质,则不存在逆元
else:
return x % m # 返回正值的逆元
# 测试案例
if __name__ == "__main__":
try:
result = find_mod_inverse(5, 26)
print(f"The modular inverse of 5 modulo 26 is: {result}")
except ValueError as e:
print(e)
```
运行以上代码会输出:
```
The modular inverse of 5 modulo 26 is: 21
```
这表明 \(5\) 模 \(26\) 的逆元是 \(21\),验证过程如下:
\[ 5 \times 21 \equiv 1 \pmod{26}. \]
---
#### 更复杂的示例:求 \(46480\) 模 \(39423\) 的逆元
修改测试部分代码如下:
```python
try:
result = find_mod_inverse(46480, 39423)
print(f"The modular inverse of 46480 modulo 39423 is: {result}")
except ValueError as e:
print(e)
```
假设经过计算发现两者互质,则程序将返回对应的逆元值。
---
### 注意事项
- 若输入的两数不互质(如 \(\text{gcd}(a, b) \neq 1\)),则无法找到模逆元[^2]。
- 计算过程中可能遇到负数情况,最终需通过取模运算将其转换为正数范围内的结果。
---
阅读全文
相关推荐













