Last active
July 29, 2016 10:39
-
-
Save justinfay/47577b78106ce0b79096443c5d10d03b to your computer and use it in GitHub Desktop.
generator sieve of eratosthenes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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