首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Miller Rabin测试慢Python

Miller Rabin测试慢Python
EN

Stack Overflow用户
提问于 2013-08-13 22:26:17
回答 2查看 534关注 0票数 0

因此,我从pseudocode.txt中读取了伪代码,并认为用python编写它是很酷的。所以我写了这个:

代码语言:javascript
复制
n = input('Enter a number to test ')
n = int(n)
a=int(5)
d = n - 1
s = 0
while (d % 2 == 0):
   s = s + 1
   d = int(d/2)
x = a**d
x = x % n
if (x==1 or x==(n-1)):
   print("probably prime")
r = int(1)
while(r<(s-1)):
   x = x**2
   x = x%n
   if (x==1):
      print ("composite")
   if (x==(n-1)):
      print ("probably prime")
print("if nothing above is printed n is composite")

它运行得很好,但我一进入六位数,它就非常慢。所以我找到了一些test#Python代码,它几乎是即时的,即使是大(10^30)个数字。

那么,我在上面的代码中做错了什么,使它慢得多呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-13 22:49:54

您还应替换:

代码语言:javascript
复制
x = a**d
x = x % n

通过以下方式:

代码语言:javascript
复制
x = pow(a, d, n)

它比朴素方法做模指数要快得多,因为它在每乘时都取模,而不是建立一个正态数,然后取模数。

票数 5
EN

Stack Overflow用户

发布于 2013-08-13 22:32:42

链接代码中的第二个循环最多只执行5次迭代,而您的操作类似log(n)。

编辑:甚至更多- "r“变量从未被修改过,因此循环的退出条件永远不会被满足。退出循环的唯一可能性是中断。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18220278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档