Все написано и протестировано. Таким образом, нет необходимости изобретать колесо.
python -m timeit -r10 -s"from sympy import sieve" "primes = list(sieve.primerange(1, 10**6))"
дает нам рекордный разрыв 12,2 мс!
10 loops, best of 10: 12.2 msec per loop
Если это не достаточно быстро, вы можете попробовать PyPy:
pypy -m timeit -r10 -s"from sympy import sieve" "primes = list(sieve.primerange(1, 10**6))"
, в результате чего:
10 loops, best of 10: 2.03 msec per loop
Ответ с 247 списками голосов для 15,9 мс для лучшего решения. Сравните это !!!