文章目录
效果
代码
import math
# k、q生成
def get_KQ(n: int)-> list:
Q = int(n - 1)
K = 0
while(Q%2==0):
K += 1
Q = int(Q / 2)
return K, Q
# 素数判断
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
# a选择
def get_A(n: int, nums=1)-> list:
A = []
flag = 0
for i in range(2,n):
if(flag bool:
if (a**q)%n==1:
return True
for i in range(k):
if (a**((2**i)*q))%n==n-1:
return True
return False
# Miller_Rabin_Test
def M_R_Test(n, nums):
k, q = get_KQ(n)
a = get_A(n, nums=nums)
p = 1
for i in a:
if judge_(n, k, q, i)==True:
p *= 0.25
else:
p = 1
break
return p
if __name__=='__main__':
# 用于检验的素数数量
nums = 10
# 被检验数
n = 49921
# 检验结果
print(f'nn为合数的概率为:{M_R_Test(n, nums)}')