我正在尝试用 Python 创建一个素筛。
我首先制作一个从 2 到 2000 的列表。我想通过检查遍历所有素数,并从列表中删除所有素数的倍数。
我还没有绕过素数循环,但我确实有一个方法可以从数字 2 开始,然后删除它的所有倍数。
primes=list(range(2,2001))
p=2
while p<len(primes):
for x in range (p*p, len(primes), p):
primes.remove(x)
print(primes)
这会打印:[...] 1989、1991、1993、1995、1997、1999、2000]
如您所见,数字 2000 仍然存在,但不应该存在。
Traceback (most recent call last):
File "C:/Users/Are/PycharmProjects/Project Euler/10.py", line 8, in <module>
primes.remove(x)
ValueError: list.remove(x): x not in list
我的推理有什么问题?
我正在使用 PyCharm,有没有办法让我在出错时打印 x 的值?
请您参考如下方法:
你的列表不是 2000 长,你从 2.. 开始
>>> primes=list(range(2,2001))
>>> print len(primes)
1999
所以当你执行 while 循环时,它不会达到 2000...:)
