rabin算法java_Miller-Rabin算法

本文介绍了Miller-Rabin素数检测算法,该算法基于费马小定理和二次探测定理,能够在O(k log2(n))的时间内检测大整数是否为素数。文章解释了算法原理,并提供了C++和Java的实现代码,同时讨论了卡迈克尔数这一特殊情况。
摘要由CSDN通过智能技术生成

写在前面:

记录了个人的学习过程,同时方便复习

整理自网络

非原创部分会标明出处

9a5bc926bce9fe1cafac1b12b68f42ee.png

by blackgryph0n

结论

Miller-Rabin算法可以在O(k log2(n))的时间内检测一个超级大的正整数n是否是素数,k为自己设定的检测的次数

裸的Miller-Rabin算法在验证一个数是否为素数时出错的可能性随着测试次数的增加而降低(不可能降为0)

证明

费马检测

据费马小定理,有ap ≡ a (mod p),p为素数

而费马小定理的逆命题是若任意正整数n满足an ≡ a (mod n),则n为素数

(注意,是假命题,p是素数为xp ≡ x (mod p)的充分不必要条件)

通常地,为了方便计算,使a==2

很长一段时间里,人们都认为费马小定理的逆命题是正确的,并且有人亲自验证了a=2, p<300的所有情况

1819年有人发现了费马小定理逆命题的第一个反例:虽然2的340次方除以341余1,但341=11*31

后来,人们又发现了561, 645, 1105等数都表明a=2时Fermat小定理的逆命题不成立。虽然这样的数不多,但不能忽视它们的存在

于是,人们把所有能整除2^(n-1)-1的合 数n叫做伪

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值