Python while while循环不会退出(初学者)

时间:2015-05-05 03:00:37

标签: python while-loop

最后的while循环没有退出,我无法弄清楚原因。

import sys

def is_prime(n):
    if n == 3:
        return True
    elif n == 4:
        return False
    else:
        for i in xrange(2,n):
            if n % i == 0:
                return False
        return True

primes = [2, 3]

counter = int(raw_input("Which prime number would you like to find? "))

while len(primes) < counter:
    for i in xrange(primes[-1], sys.maxint):
        if is_prime(i):
            primes.append(i)

print(primes[-1])

1 个答案:

答案 0 :(得分:4)

它不会退出的原因是因为潜在素数的搜索空间太大了。你的桌面不是那么快!他们有超级计算机试图计算这些东西。

for i in xrange(primes[-1], sys.maxint):

首先,尝试将其更改为更合理的内容:

for i in xrange(primes[-1], 10000):

您将看到您的循环确实退出。

修改

您可以为此问题添加一些不错的优化。首先,你应该增加2来跳过所有偶数:

for i in xrange(primes[-1], sys.maxint, 2):

其次,您只需要测试除可能素数的平方根之外的除数。

for i in xrange(2,n**(0.5)):

这样做的原因是产品为n的任何两个数字,其中一个数字总是小于n的平方根 - 因此如果你没有找到除数当你达到n的平方根时,你可以停下来。这大大减少了大数字的搜索空间。