Я написал сито Эратосфена - я думаю, но похоже, что оно не так оптимизировано, как могло бы быть. Он работает, и он получает все простые числа до N, но не так быстро, как я надеялся. Я все еще изучаю Python - начиная с двух лет Java - так что если что-то не особенно Pythonic, то я извиняюсь:
def sieve(self):
is_prime = [False, False, True, True] + [False, True] * ((self.lim - 4) // 2)
for i in range(3, self.lim, 2):
if i**2 > self.lim: break
if is_prime[i]:
for j in range(i * i, self.lim, i * 2):
is_prime[j] = False
return is_prime
Я рассмотрел другие вопросы, подобные этому, но я не могу понять, как некоторые из более сложных оптимизаций будут вписываться в мой код. Любые предложения?
EDIT: по запросу некоторые из других оптимизаций, которые я видел, останавливают итерацию первого цикла цикла до предела и пропускают разные числа - что я считаю оптимизацией колес?
EDIT 2: Здесь код, который будет использовать этот метод, для Padraic:
primes = sieve.sieve()
for i in range(0, len(primes)):
if primes[i]:
print("{:d} ".format(i), end = '')
print() # print a newline