当前位置: 首页 > 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.lryc.cn/news/617937.html

相关文章:

  • 前端组件库双雄对决:Bootstrap vs Element UI 完全指南
  • Unknown collation: ‘utf8mb4_0900_ai_ci‘
  • 软考 系统架构设计师系列知识点之杂项集萃(121)
  • mysql基础(二)五分钟掌握全量与增量备份
  • OCSSA-VMD-Transformer轴承故障诊断,特征提取+编码器!
  • 视频剪辑的工作流程
  • socket编程TCP
  • 自然语言处理实战:用LSTM打造武侠小说生成器
  • 银河通用招人形机器人强化学习算法工程师了
  • IoT/透过oc_lwm2m/boudica150 源码中的AT指令序列,分析NB-IoT接入华为云物联网平台IoTDA的工作机制
  • openpnp - 顶部相机环形灯光DIY
  • Godot ------ 平滑拖动03
  • 企业高性能 Web 服务部署实践(基于 RHEL 9)
  • Jupyter lab保姆级教程和自动补齐功能实现
  • VMware 安装Ubuntu server 20.04
  • IPCP(IP Control Protocol,IP控制协议)
  • Rust 库开发全面指南
  • 《C++中 type_traits 的深入解析与应用》
  • 10种经典学习方法的指令化应用
  • 使用docker compose 部署dockge
  • 训推一体 | 暴雨X8848 G6服务器 x Intel®Gaudi® 2E AI加速卡
  • 【k近邻】 K-Nearest Neighbors算法k值的选择
  • es基本概念-自学笔记
  • Java多线程并发控制:使用ReentrantLock实现生产者-消费者模型
  • Redis中的AOF原理详解
  • 在 Linux 中通过 yum 安装和使用 Nginx
  • OrbStack 入门教程:macOS 上的轻量级容器与虚拟机管理工具
  • vue+django 大模型心理学智能诊断评测系统干预治疗辅助系统、智慧心理医疗、带知识图谱
  • 基于8×8 DCT变换的图像压缩MATLAB实现
  • 云服务器部署SSM项目