这是我用Python编写的程序:
import sys
from time import time
start = time()
x = input('How many primes? ')
if x < 1:
sys.exit("invalid input")
y = 3
primes = [2]
while len(primes) < x:
for i in primes:
if y % i == 0:
break
elif i > (y**(.5)):
primes.append(y)
break
y += 1
print primes
print time() - start
效果很好,但我注意到一些奇怪的事情。如果我要求1000个素数,该程序需要大约2.3秒才能找到答案,但如果我要求10000个素数,该程序大约需要1.8秒才能找到答案。这没有多大意义,因为程序必须做更多的计算才能找到10000个素数而不是1000个。任何人都可以解释导致这种情况的原因吗?
答案 0 :(得分:1)
在解决了一个小问题(并删除输出以使事情更清洁)后,它对我有用:
~/coding$ python pcount.py
How many primes? 1000
0.0194370746613
~/coding$ python pcount.py
How many primes? 2000
0.0495121479034
~/coding$ python pcount.py
How many primes? 5000
0.172223091125
~/coding$ python pcount.py
How many primes? 10000
0.449481010437
问题在于你的第一个
start = time()
在您要求用户输入之前行。你没有计算进行计算需要多长时间,你计算输入数字需要多长时间..
答案 1 :(得分:1)
您可能希望在用户输入后对开始时间进行采样:)
移动后,它在0.012秒内运行1000和0.365秒运行10000