使用Python计算1000素数

时间:2014-07-11 05:00:56

标签: python

我正在尝试找到1000素数而我正在尝试这样做而不会欺骗记忆或其他代码。你能否告诉我,我的代码是完全正确的还是完全偏离了基础?

primes = []
num = 3
while (len(primes)) < 1000:
    if num / 2 == 0:
        num = num + 1
    else:
        x = num - 1
        for z in range(2,x):
            if num % z == 0 :
                num = num + 1
            else:
                primes.append(num)
                num = num + 1

print primes[1000]

1 个答案:

答案 0 :(得分:1)

您遇到了一些问题(num / 2 == 0应该是num % 2 == 0 1 ,但实际上,使用continuebreak会真的有帮助。 e.g。

for z in range(2,x):  # xrange would be a performance win on python2.x
    if num % z == 0 :
        num = num + 1
    else:
        primes.append(num)
        num = num + 1

在这个循环中,你可能会发现自己增加num一堆。实际上,你只想增加一次(继续下一个数字)。所以,在你增加它之后,你想要break。此外,else语句需要位于for循环:

for z in range(2, x):
    if num % z == 0:
        break  # exit the for loop, don't execute `else` clause.
else:
    # only executes if `break` was never encountered.
    primes.append(num)

# This happens no matter what and should only happen once
# Might as well pull it out of the loop.
num += 1

1 在2处检查可除性是有用的 - 它是循环的第一次迭代。如果您使用了xrange(对于python2.x)和break,那么这种优化(可能)并不值得。

旁白:你真的不需要从2N - 1运行循环,你实际上可以从2到{{1}运行循环这使得这个批次更有效:-)虽然仍然不是你能做到的最好的... Sieve of Eratosthenes是另一种更有效地做到这一点的算法,可能甚至比那更好的方法(虽然我和#39;我不是这方面的专家)