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

密码学算法 - Miller-Rabin 素数检验

当你需要验证一个大数是否为素数时,Miller-Rabin 算法就像一位经验丰富的侦探🕵️‍♂️,能在短时间内给出一个可靠的答案,帮助你在数字的迷宫中找到真相。

欢迎来到《密码学核心算法实战》的 Miller-Rabin 素数检验算法专题!这里没有纸上谈兵的理论空谈(真的不画大饼😉),只有一把把能直接撬动数据安全的精密齿轮⚙️。

Miller-Rabin算法的原理 🌟

Miller-Rabin算法基于两个数学定理:

  1. 费马小定理:如果p pp是素数,且a aa是一个整数,满足1 < a < p − 1 1 < a < p-11<a<p1,那么a p − 1 ≡ 1 m o d p a^{p-1} \equiv 1 \mod pap11modp
  2. 二次剩余相关:如果p pp是奇素数,方程x 2 ≡ 1 m o d p x^2 \equiv 1 \mod px21modp,只有两个解x ≡ ± 1 m o d p x \equiv \pm 1 \mod px±1modp

首先,将待检验的奇数n nn写成n − 1 = 2 s ⋅ d n-1 = 2^s \cdot dn1=2sd的形式,其中d dd是奇数。然后使用费马小定理:
a n − 1 ≡ a 2 s ⋅ d ≡ ( … ( ( a d ) 2 ) 2 … ) 2 ≡ 1 m o d n a^{n-1} \equiv a^{2^s \cdot d} \equiv (\ldots ((a^d)^2)^2 \ldots)^2 \equiv 1 \mod nan1a2sd(((ad)2)2)21modn

如果n nn是素数,最后的结果应该是1 11

然后,从后往前看,最后结果为1 11,那么前一个结果要么是1 11,要么是− 1 -11。所以,如果n nn是素数,那么在a d a^dad的平方过程中,只有两个结果:

  1. a d ≡ ± 1 m o d n a^d \equiv \pm 1 \mod nad±1modn,平方后续全是1 11
  2. a d ≢ 1 m o d n a^d \not \equiv 1 \mod nad1modn,但在某次平方后变成− 1 -11,之后的平方全是1 11

注意,如果n nn是合数,那么a d a^dad的平方过程中也可能出现1 11,但前一个结果不是1 11− 1 -11,也就是在某次平方后出现1 11,但前一个结果不是− 1 -11。我们将这个根叫做“非平凡平方根”,如果存在非平凡平方根,那么n nn一定是合数。

综上所述:

如果n nn是素数,那么a d a^dad的平方过程中只有两种情况:要么一开始是± 1 \pm 1±1,后面全是1 11,要么在某次平方后出现− 1 -11,之后全是1 11

如果出现了非平凡平方根,那么n nn是合数,如果啥也没有出现,那么n nn很可能是合数。

最后,关于a aa的选择,理论上来说,随机选择a aa是可以的,但为了保证算法的确定性,我们可以选择一些特定的a aa,例如在2 64 2^{64}264内的几个小素数,这样就能保证对于2 64 2^{64}264内的数进行检验时,算法是完全准确的。

Miller-Rabin算法的操作 🙃

输入:一个整数n nn,以及一个整数k kk表示测试的轮数。
输出:一个布尔值,表示n nn是否为素数。
算法步骤:

  1. 如果n ≤ 1 n \leq 1n1,返回 False;如果n ≤ 3 n \leq 3n3,返回 True;如果n nn是偶数,返回 False。
  2. n − 1 n-1n1写成2 s ⋅ d 2^s \cdot d2sd的形式,其中d dd是奇数。
  3. 进行k kk轮测试:
    • 选择一个整数a aa,满足1 < a < n − 1 1 < a < n-11<a<n1
    • 计算x = a d m o d n x = a^d \mod nx=admodn
    • 如果x ≡ 1 m o d n x \equiv 1 \mod nx1modnx ≡ n − 1 m o d n x \equiv n-1 \mod nxn1modn,继续下一轮测试。
    • 否则,进行s − 1 s-1s1次循环:
      • 计算x = x 2 m o d n x = x^2 \mod nx=x2modn
      • 如果x ≡ n − 1 m o d n x \equiv n-1 \mod nxn1modn,跳出循环,继续下一轮测试。
    • 如果循环结束后x ≢ n − 1 m o d n x \not\equiv n-1 \mod nxn1modn,返回 False。
  4. 如果所有轮测试都通过,返回 True。

Miller-Rabin算法的实现 😶‍🌫️

这个算法的实现非常简单,核心就是根据上面的原理进行迭代检查。以下是一个Python实现:

defMiller_Rabin(n):# 特殊情况ifn<=1:returnFalseelifn<=3:returnTrueelifn%2==0:returnFalse# 把 n-1 写成 d * 2^sd=n-1s=0whiled%2==0:d//=2s+=1# 对 2^64 内确定性测试a_list=[2,3,5,7,11,13,17,19,23,29,31,37]foraina_list:x=pow(a,d,n)# 计算 a^d mod nifx==1orx==n-1:# 如果 a^d ≡ 1 (mod n) 或 a^d ≡ -1 (mod n),继续测试下一个 acontinuefor_inrange(s-1):x=pow(x,2,n)# 计算 x^2 mod nifx==n-1:# 如果 x^2 ≡ -1 (mod n),继续测试下一个 abreakelse:returnFalsereturnTrue

SageMath 偷懒 🤓👆

有同学说:“博主,博主,你的算法确实很厉害,但是还是太吃操作了,有没有更加简单无脑的用法?”👻
有的,兄弟有的,这样的算法在 SageMath 中早就已经被封装好了🤫,我们直接调用就行了:

fromsage.allimportis_prime# sage环境中才生效# 直接调用 is_prime 函数就可以了,它内部已经部署了 Miller-Rabin 算法,并且在此之上还做了很多优化,能够快速准确地判断一个数是否为素数。flag=is_prime(n)# flag 是一个布尔值,True 表示 n 是素数,False 表示 n 是合数

怎么样,是不是非常简单?🤣👉🤡

我的个人blog:Alice and Bobの神秘小屋

http://www.jsqmd.com/news/513540/

相关文章:

  • 旧手机变废为宝:用KSWeb搭建个人网站服务器的完整指南(含内网穿透教程)
  • 2026年公众号降AI率怎么操作?自媒体人亲测这招管用 - 还在做实验的师兄
  • 避开VisionPro坐标空间三大坑:命名冲突、像素空间误解与转换API正确用法
  • 2026年降AI工具TOP5盘点,从性价比到效果一次看明白 - 还在做实验的师兄
  • IPsec协议考古学:从RFC文档到Wireshark抓包的时空对话
  • HY-Motion 1.0效果展示:标准版vs Lite版在关节旋转精度上的对比分析
  • 通义千问3-Reranker-0.6B实操手册:batch_size调优与内存占用平衡策略
  • 废旧安卓手机秒变Web服务器:KSWeb+Termux+Ngrok保姆级配置指南(含免费隧道申请)
  • Ostrakon-VL-8B实战:基于YOLOv11的目标检测与视觉理解融合应用
  • Pixel Dimension Fissioner一文详解:16-bit冒险工坊交互设计与技术实现
  • Qwen3-32B-Chat百度技术趋势研判:2025年大模型私有部署的硬件选型指南
  • AI研发团队必看:BAAI/bge-m3语义引擎集成最佳实践
  • Windows下用Hashcat+GPU暴力破解Excel密码:从提取Hash到实战破解全流程
  • Whisky技术解析:macOS上的Windows兼容层创新方案
  • IDEA插件搬家指南:用ToolBox升级后如何手动迁移插件配置(附2023版路径大全)
  • Pixel Dimension Fissioner效果展示:同一产品功能点裂变为Figma提示词+PRD描述+海报文案
  • YOLO12行业落地:半导体晶圆厂中wafer载具、探针卡与缺陷区域定位
  • 考虑特性分布的储能电站接入的电网多时间尺度源储荷协调调度策略附Matlab代码
  • Simple Automatic Resource Synchronization Method for Vulkan Applications
  • 树莓派安全远程访问:除了改密码,用Cpolar做内网穿透还要注意这几点
  • Pixel Dimension Fissioner效果展示:裂变结果支持按‘创意强度’‘专业度’‘亲和力’三维排序
  • LobeChat模型切换指南:如何在Qwen-8B等模型间自由切换
  • SAM 3开源模型实战:构建私有化图像标注平台,替代LabelMe效率提升5倍
  • Qwen3-ASR-1.7B部署案例:高校科研团队构建方言保护语音数据库
  • StructBERT-Large本地化部署实战:适配国产昇腾/寒武纪AI芯片的可行性探索(附适配要点)
  • FireRed-OCR Studio部署教程:WSL2环境下Windows本地开发调试流程
  • uniapp+pdfh5实现移动端PDF预览:从零封装可复用组件(含关闭按钮优化)
  • 2026年包装制品定制标杆厂家参考:温州市阿辉制袋,复合包装袋、手提保温袋、铝箔保温袋、食品保温袋、饭盒保温袋、加厚保温袋、各类布袋及包装制品定制优选 - 海棠依旧大
  • Qwen3-0.6B-FP8模型监控:性能指标与日志分析
  • YOLO X Layout部署优化:如何调整置信度阈值获得最佳分析效果