最后的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])
答案 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
的平方根时,你可以停下来。这大大减少了大数字的搜索空间。