私はPythonでエラトステネスのふるいの実装を作成しています。発生する問題は、すべての素数(主に小さい番号の素数)が表示されるわけではありません。
これが私のコードです:
def prevPrimes(n):
from math import sqrt
from time import time
start = time()
if type(n) != int and type(n) != long:
raise TypeError("Arg (n) must be of <type 'int'> or <type 'long'>")
if n <= 2:
raise ValueError("Arg (n) must be at least 2")
limit, x, num, primes = sqrt(n), 2, {}, []
for i in range(1, n+1):
num[i] = True
while x < limit:
for i in num:
if i%x==0:
num[i] = False
x += 1
for i in num:
if num[i]:
primes.append(i)
end = time()
primes = sorted(primes)
print round((end - start), 2), ' seconds'
return primes
を入力>>> prevPrimes(1000)
すると、結果は次のようになります。[2, 3, 5, 7, 11, 13, 17]
など。ただし、次のようになります[1, 37, 41, 43, 47, #more numbers]
。
False
私のプログラムが素数をチェックする方法のために、問題は「元の」素数(2、3、5、7、11、13、17など)を示しているという事実にあることを私は知っています。どうすればこれを回避できますか?前もって感謝します :)