Я пытаюсь построить сито для решений проекта Эйлера.
Я нуждаюсь в простых числах примерно до 100M, желательно с возможностью пойти намного выше.
Эта реализация у меня работает нормально, но очень медленно:
class Primes:
__size = None
__sieve = []
__primes = []
def __init__(self, size):
self.__size = size
self.__sieve = [True] * size
for x in range(2, size):
if self.__sieve[x]:
self.foundPrime(x);
def foundPrime(self, x):
self.__primes.append(x)
for duplicate in range(2 * x, self.__size, x):
self.__sieve[duplicate] = False
Для сита размером 100M эта инициализация занимает около 70 секунд на моем довольно дорогом компьютере. Кто-нибудь знает почему? Потому что в Java и C # это заняло у меня около 1 секунды ...
Итак, этот пост отличается от других постов тем, что я не хочу знать, как реализовать алгоритм, я хочу понять, почему он так медленно работает в Python.
Некоторые отпечатки дают мне информацию, что около 50% времени уходит на поиск первых 100К простых чисел.