diff --git a/sieve-fn.py b/sieve-fn.py index 704b059..4e99edf 100644 --- a/sieve-fn.py +++ b/sieve-fn.py @@ -20,3 +20,4 @@ def next(): for n in range(10): print next() + diff --git a/sieve_gen/example.py b/sieve_gen/example.py new file mode 100644 index 0000000..9b3ee25 --- /dev/null +++ b/sieve_gen/example.py @@ -0,0 +1,4 @@ +import sieve + +for n, i in zip(range(10), sieve.sieve()): + print i \ No newline at end of file diff --git a/sieve_gen/sieve.py b/sieve_gen/sieve.py new file mode 100644 index 0000000..382f899 --- /dev/null +++ b/sieve_gen/sieve.py @@ -0,0 +1,19 @@ +# this is an implementation of the Eratosthenes' Sieve using +# a generator. + +_primeslist = [2] + +def _is_prime(primes, n): + for i in primes: + if n % i == 0: + return False + return True + +def sieve(): + start = _primeslist[-1] + 1 + while 1: + if _is_prime(_primeslist, start): + _primeslist.append(start) + yield start + + start += 1 \ No newline at end of file diff --git a/sieve_gen/sieve.pyc b/sieve_gen/sieve.pyc new file mode 100644 index 0000000..54851b9 Binary files /dev/null and b/sieve_gen/sieve.pyc differ diff --git a/sieve_gen/test1.py b/sieve_gen/test1.py new file mode 100644 index 0000000..965a9cd --- /dev/null +++ b/sieve_gen/test1.py @@ -0,0 +1,8 @@ +import sieve + +def test1(): + s = sieve.sieve() + i = iter(s) + assert i.next() == 3 + +test1() \ No newline at end of file diff --git a/sieve_gen/test2.py b/sieve_gen/test2.py new file mode 100644 index 0000000..672ce8a --- /dev/null +++ b/sieve_gen/test2.py @@ -0,0 +1,12 @@ +import sieve + +def test2(): + s = sieve.sieve() + i = iter(s) + + for x in range(3): + i.next() + + assert i.next() == 11 # the fifth prime number should be 11 + +test2() \ No newline at end of file diff --git a/sieve_gen/test3.py b/sieve_gen/test3.py new file mode 100644 index 0000000..d6b7ff3 --- /dev/null +++ b/sieve_gen/test3.py @@ -0,0 +1,10 @@ +import sieve + +def test3(): + s = sieve.sieve() + i = iter(s) + for x in range(15): + i.next() + assert i.next() == 59 # the seventeenth prime number should be 59 + +test3() \ No newline at end of file diff --git a/sieve_iter/example.py b/sieve_iter/example.py new file mode 100644 index 0000000..9b3ee25 --- /dev/null +++ b/sieve_iter/example.py @@ -0,0 +1,4 @@ +import sieve + +for n, i in zip(range(10), sieve.sieve()): + print i \ No newline at end of file diff --git a/sieve_iter/sieve.py b/sieve_iter/sieve.py new file mode 100644 index 0000000..9b68fef --- /dev/null +++ b/sieve_iter/sieve.py @@ -0,0 +1,25 @@ +# this is an implementation of Eratosthenes' Sieve using +# Python's iterator functionality. Here, 'sieve' is a class that +# obeys the iterator protocol. + +class sieve(object): + def __init__(self): + self.primeslist = [2] + + def __iter__(self): + return self + + def next(self): + start = self.primeslist[-1] + 1 + while 1: + if self.is_prime(start): + self.primeslist.append(start) + return start + + start += 1 + + def is_prime(self, n): + for i in self.primeslist: + if n % i == 0: + return False + return True diff --git a/sieve_iter/sieve.pyc b/sieve_iter/sieve.pyc new file mode 100644 index 0000000..0f1c025 Binary files /dev/null and b/sieve_iter/sieve.pyc differ diff --git a/sieve_iter/test1.py b/sieve_iter/test1.py new file mode 100644 index 0000000..965a9cd --- /dev/null +++ b/sieve_iter/test1.py @@ -0,0 +1,8 @@ +import sieve + +def test1(): + s = sieve.sieve() + i = iter(s) + assert i.next() == 3 + +test1() \ No newline at end of file diff --git a/sieve_iter/test2.py b/sieve_iter/test2.py new file mode 100644 index 0000000..0637d48 --- /dev/null +++ b/sieve_iter/test2.py @@ -0,0 +1,10 @@ +import sieve + +def test2(): + s = sieve.sieve() + i = iter(s) + for x in range(3): + i.next() + assert i.next() == 11 # the fifth prime number should be 11 + +test2() \ No newline at end of file diff --git a/sieve_iter/test3.py b/sieve_iter/test3.py new file mode 100644 index 0000000..d6b7ff3 --- /dev/null +++ b/sieve_iter/test3.py @@ -0,0 +1,10 @@ +import sieve + +def test3(): + s = sieve.sieve() + i = iter(s) + for x in range(15): + i.next() + assert i.next() == 59 # the seventeenth prime number should be 59 + +test3() \ No newline at end of file diff --git a/sieve_mod/example.py b/sieve_mod/example.py new file mode 100644 index 0000000..b50b924 --- /dev/null +++ b/sieve_mod/example.py @@ -0,0 +1,4 @@ +import sieve + +for n in range(10): + print sieve.next() \ No newline at end of file diff --git a/sieve_mod/sieve.py b/sieve_mod/sieve.py new file mode 100644 index 0000000..6f7e0aa --- /dev/null +++ b/sieve_mod/sieve.py @@ -0,0 +1,20 @@ +# Implementation of Eratosthenes' Sieve by Michael Meldrum: +# Modular form + +_primeslist = [2] + +def _is_prime(primes, n): + for i in primes: + if n % i == 0: + return False + return True + +def next(): + global _primeslist + start = _primeslist[-1] + 1 + while 1: + if _is_prime(_primeslist, start): + _primeslist.append(start) + return start + + start += 1 \ No newline at end of file diff --git a/sieve_mod/sieve.pyc b/sieve_mod/sieve.pyc new file mode 100644 index 0000000..1845fce Binary files /dev/null and b/sieve_mod/sieve.pyc differ