Я делаю реализацию решета Эратосфена в 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]
.
Я знаю, что проблема заключается в том, что он указывает «исходные» простые числа (2, 3, 5, 7, 11, 13, 17 и т. д.) как False
из-за того, как моя программа проверяет простые числа. Как я могу этого избежать? Заранее спасибо :)
%
. Это всего лишь пробное деление. - person hammar   schedule 21.11.2012