最近在带家教教学生信息安全数学基础,给他布置了Fermat素性检测算法编程实现的大作业。怕他不会,在这里写下教程,希望他能看到。(原理与算法部分摘自信息安全数学基础老师的课件)
原理
算法
python实现
from random
import random
def BFactor(a
,b
):
if(b
>a
):
t
=a
a
=b
b
=t
r
= b
while(r
!=0):
r
= a
%b
a
= b
b
= r
return a
n
= int(input("请输入需要检测的整数n:"))
K
= int(input("请输入循环次数k:"))
k
= 0
while(k
<K
):
flag
= False
while(not flag
):
b
= int(random
()*(n
-2))
if(b
>=2 and b
<=n
-2):
flag
= 5
factor
= BFactor
(b
,n
)
r
= (b
**(n
-1))%n
print("k="+str(k
+1)+"时,取b="+str(b
),end
=",")
print("g=("+str(b
)+","+str(n
)+")="+str(factor
),end
=',')
print("r="+str(b
)+"^"+str(n
-1)+"(mod "+str(n
)+")="+str(r
),end
=',')
if(factor
>1):
print("故n="+str(n
)+"为合数")
break
elif(r
!=1):
print("故n="+str(n
)+"为合数")
break
else:
print("故n="+str(n
)+"可能为素数")
k
+=1
if(k
==K
):
print("所以, n="+str(n
)+"可能为素数,n为素数的概率为"+str((1-1/(2**k
))*100)+"%")```
转载请注明原文地址:https://ipadbbs.8miu.com/read-46361.html