程序运行时间的奇怪结果

时间:2012-03-02 23:43:55

标签: python

这是我用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个。任何人都可以解释导致这种情况的原因吗?

2 个答案:

答案 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