Python拉宾米勒(判断素数)
这里引用了另一位博主对拉宾米勒算法的字面介绍:
米勒-拉宾算法:快速判断一个数是不是素数
需要用到的定理:
最小费马定理:如果n是素数,则(a ^ (n - 1)) % n恒等于1。
快速模取幂
米勒-拉宾算法就是结合上面两种,通过不断判断fmod(a, n - 1, n)的值是否为1来判断。这是一个概率算法,如果为1,不一定为素数,不为1,则必定是合数。循环判断多次就会让概率变得极为的小。
---------------------
作者:omsobliga
来源:CSDN
原文:https://blog.csdn.net/lhshaoren/article/details/7834055
以下给出拉宾米勒算法的python代码和注释:
import random
def rabinMiller(num):
#快速幂
s=num-1
t=0
while s%2==0:
s=s//2
t+=1
#最小费马定理
for trials in range(5):
a=random.randrange(2,num-1)
v=pow(a,s,num)
if v!=1:
i=0
while v!=(num-1):
if i==t-1:
return False
else:
i=i+1
v=(v**2)%num
return True
def isPrime(num):
if num<2:
return False
#prime.txt是存放素数表的文件
lowPrimes=open('prime.txt','r')
if num in lowPrimes:
return True
for prime in lowPrimes:
if num%prime==0:
return False
return rabinMiller(num)
#generateLargePrime函数返回素数。它选出一个大的随机数保存到num
#再将num传到isPrime和rabinMiller进行判断是不是素数
#先isPrime后rabinMiller是因为复杂度先简后繁
def generateLargePrime(keysize=1024):
while True:
num=random.randrange(2**(keysize-1),2**keysize)
if isPrime(num):
return num
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】