Skip to content

Instantly share code, notes, and snippets.

@justinfay
Last active July 29, 2016 10:39
Show Gist options
  • Save justinfay/47577b78106ce0b79096443c5d10d03b to your computer and use it in GitHub Desktop.
Save justinfay/47577b78106ce0b79096443c5d10d03b to your computer and use it in GitHub Desktop.
generator sieve of eratosthenes
"""
A thought that came to me last night in bed.
A generator of erathomous!
"""
class Sieve:
def __init__(self):
def series():
i = 1
while True:
i += 1
yield i
self.series = series()
self._generators = set()
self._nums = set()
self.primes = set()
def __iter__(self):
return self
def __next__(self):
# TODO: optimize
for gen in self._generators:
next_ = next(gen)
self._nums.add(next_)
while next_ < max(self.primes) + 10000:
next_ = next(gen)
self._nums.add(next_)
while True:
next_ = next(self.series)
if next_ in self._nums:
continue
else:
self.primes.add(next_)
self._generators.add(self.get_gen(next_))
return next_
def get_gen(self, num):
def gen(mult):
cur = mult
yield cur
while True:
cur = mult + cur
yield cur
return gen(num)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment