【拓展欧几里得求逆元】51nod1256 51nod1119 Light1067

本文介绍了如何运用拓展欧几里得算法来求解模意义下的乘法逆元,详细阐述了该方法的适用场景,并提及了与费马小定理的联系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乘法逆元及求法 博客:http://www.cnblogs.com/dupengcheng/p/5487362.html



能用费马小定理求逆元的都能用拓欧做

基准时间限制:1 秒 空间限制:131072 KB 分值: 0  难度:基础题
### 使用扩展欧几里得算法求逆元的示例 #### 理论背景 扩展欧几里得算法用于找到两个整数 \(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]。 - 计算过程中可能遇到负数情况,最终需通过取模运算将其转换为正数范围内的结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值