【发布时间】:2019-08-26 02:45:29
【问题描述】:
我有这个程序可以列出一定范围内的素数。问题是数字越大,它变得越慢。我如何使用 numpy 来提高速度?如果不是 numpy,有没有其他方法可以加快计算速度?
from datetime import date
import time
import numpy as np
today = date.today()
lower = int(input("Starting Number: "))
upper = int(input("Ending Number: "))
print("Prime numbers between",lower,"and",upper,"are:")
with open("primenumbers.txt","a") as file:
file.write("\n")
file.write("{}".format(today))
file.write("\n")
start = time.time()
for num in range(lower,upper + 1):
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
print(num)
with open("primenumbers.txt","a") as file:
file.write("\n")
file.write("{}".format(num))
end = time.time()
print(end - start)
我想更快地处理数据,请显示一些代码。
【问题讨论】:
-
“数字越大越慢”:是的,素数就是这样。您检查的最大数量越大,所需的时间就越长。你有什么问题?
-
@ifconfig 我明白这一点,但我怎样才能让这个过程更快。我看到人们使用 numpy 来加快方程的速度,所以我该怎么做。
-
for i in range(2,num): if (num % i) == 0... 哦,我的... 请先优化您要比较的值。如果数字是素数,那么它将是奇数并且应该有一个除数,这样divisor <= sqrt(num)包括偶数会使您正在执行的迭代次数加倍,并且一直搜索到该数字会使迭代次数相对而言绝对巨大搜索到平方根。请阅读数论。理想情况下,您应该缓存在一个筛子中并使用它来优化您的搜索。 -
@SpencerD 对不起,我不明白你能不能简单解释一下。我对 python 很陌生,我不是成年人,所以我没有经验。
-
搜索 '[numpy] prime' 得到了这个 stackoverflow.com/q/49936222 等等。但是为此使用 numpy 的好处尚不清楚。 Python 整数可以大于 numpy 的 int64。
标签: python python-3.x numpy