当前位置: 首页 > news >正文

​费马小定理​

在模运算中,逆元(Inverse Element)是一个非常重要的概念。给定一个整数 ( a ) 和一个模数 ( m ),( a ) 的逆元 ( inv(a) ) 是满足以下等式的整数 ( x ):

a⋅x≡1(mod m)

也就是说,( a ) 乘以它的逆元 ( x ) 后,对 ( m ) 取模的结果等于 1。

费马小定理(Fermat’s Little Theorem)

费马小定理提供了一种在模数为质数时计算逆元的方法。定理内容如下:

如果 ( p ) 是一个质数,且整数 ( a ) 不是 ( p ) 的倍数(即 ( \gcd(a, p) = 1 )),那么:

[
a^{p-1} \equiv 1 \pmod{p}
]

将等式两边同时乘以 ( a^{-1} )(即 ( a ) 的逆元),得到:

[
a^{p-2} \equiv a^{-1} \pmod{p}
]

因此,( a ) 的逆元可以通过以下公式计算:

[
inv(a) = a^{p-2} \mod p
]

代码实现

在编程中,可以使用快速幂算法高效地计算 ( a^{p-2} \mod p )。以下是 Python 的实现示例:

MOD = 10**9 + 7  # 假设模数是一个质数def inv(a):return pow(a, MOD - 2, MOD)

示例

假设 ( a = 3 ),模数 ( p = 10^9 + 7 )(这是一个常用的质数模数),那么:

[
inv(3) = 3{109 + 7 - 2} \mod 10^9 + 7
]

计算 ( 3{109 + 5} \mod 10^9 + 7 ) 的结果就是 3 的逆元。

注意事项

  1. 模数必须是质数:费马小定理仅适用于模数 ( p ) 是质数的情况。如果 ( p ) 不是质数,则需要使用扩展欧几里得算法来计算逆元。
  2. ( a ) 和 ( p ) 必须互质:即 ( \gcd(a, p) = 1 )。如果 ( a ) 是 ( p ) 的倍数,则逆元不存在。

扩展欧几里得算法

如果模数 ( m ) 不是质数,或者不确定是否是质数,可以使用扩展欧几里得算法来求逆元。该算法可以找到整数 ( x ) 和 ( y ),使得:

[
a \cdot x + m \cdot y = \gcd(a, m)
]

如果 ( \gcd(a, m) = 1 ),那么 ( x ) 就是 ( a ) 的逆元。

总结

  • 费马小定理:适用于模数是质数的情况,逆元计算公式为 ( inv(a) = a^{p-2} \mod p )。
  • 扩展欧几里得算法:适用于任意模数(只要逆元存在)。

在算法竞赛和密码学中,逆元的计算是非常常见的操作,尤其是在组合数学和模运算相关的题目中。

http://www.dtcms.com/a/326070.html

相关文章:

  • jmeter 设置随机数
  • 爬虫与数据分析结合:中国大学排名案例学习报告
  • 【FAQ】Win11创建资源不足绕开微软账号登录
  • 在macOS上扫描192.168.1.0/24子网的所有IP地址
  • 深度学习和神经网络最基础的mlp,从最基础的开始讲
  • Springboot-vue 地图展现
  • 深度学习——01 深度学习简介
  • 《 AudioClassification-Pytorch:GitHub项目网页解读》
  • [4.2-2] NCCL新版本的register如何实现的?
  • 剧本杀小程序系统开发:推动行业数字化转型新动力
  • 数据上云有什么好处?企业数据如何上云?
  • vue3-pinia
  • mysql慢查询sql
  • 分裂的王国——进程间通信
  • GeoScene 空间大数据产品使用入门(1)应用场景与基本流程
  • 【接口自动化】-7- 热加载和日志封装
  • .NET Core MVC中CSHTML
  • 【测试】BDD与TDD在软件测试中的对比?
  • AI蛋白质设计学习主线
  • 【智能的起源】人类如何模仿,简单的“刺激-反应”机制 智能的核心不是记忆,而是发现规律并能迁移到新场景。 最原始的智能:没有思考,只有简单条件反射
  • 首涂模板第45套主题2.0修正版苹果CMS模板奇艺主题二开源码
  • 解决 VS Code 右键菜单丢失问题
  • calamine读取xlsx文件的方法比较
  • Spring Boot 2.0 升级至 3.5 JDK 1.8 升级至 17 全面指南
  • 计算机视觉CS231n学习(7)
  • 【Altium designer】解决报错“Access violation at address...“
  • 【代码随想录day 17】 力扣 617.合并二叉树
  • python魔法方法__str__()介绍
  • 【Lua】题目小练9
  • 从零构建自定义Spring Boot Starter:打造你的专属开箱即用组件