这是我的代码:
primes = [2, 3]
while len(primes) != 1001:
a = primes[-1] + 2
for i in primes:
if a % i == 0:
break
else:
print(primes)
primes.append(a)
print(primes[1002])
这应该创建一个列表直到第 1001 个质数,然后打印第 1001 个数。它首先取列表中的最后一个数字并加 2,然后检查给定数字是否可以被素数列表中的任何成员整除。如果它是可整除的,则 for 循环中断并跳过 else 子句。如果不是,则将该数字附加到素数列表。重复该过程,直到列表的长度为 1001。循环结束后,打印最后一个数字。
然而,输出如下:
[2, 3]
[2, 3, 5]
_
直到手动终止程序才会终止。你能告诉我我做错了什么吗?
请您参考如下方法:
这是因为,在 primes[-1] + 2 不是质数的情况下,没有状态发生变化(因此程序永远循环)。
更好的方法可能是这样的:
from itertools import count
primes = [2, 3]
for a in count(5, step=2):
for p in primes:
if a % p == 0:
break
else:
primes.append(a)
if len(primes) > 1001:
break
