Skip to content

Instantly share code, notes, and snippets.

@onemouth
Created September 3, 2015 09:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save onemouth/0373ba7823cedc1cb8bc to your computer and use it in GitHub Desktop.
Save onemouth/0373ba7823cedc1cb8bc to your computer and use it in GitHub Desktop.
from itertools import ifilter
from itertools import islice
def sieve_worker(numbers, table):
head = next(numbers)
if head not in table:
yield head
table[head+head] = [head]
else:
primes = table[head]
del table[head]
for prime in primes:
next_filter = head+prime
if next_filter in table:
table[next_filter].append(prime)
else:
table[next_filter] = [prime]
for prime in sieve_worker(numbers, table):
yield prime
def sieve(numbers):
for prime in sieve_worker(numbers, {}):
yield prime
for i in islice(sieve(itertools.count(2)), 50):
print i
# test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment