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 の値を出力する方法はありますか?