Beautiful Code – A Prime Sieve

I saw Rob Pike’s excellent Google Tech Talk on “Concurrency and Message Passing in Newsqueak” a few days back. The talk has some very interesting ideas on dealing with parallelism and concurrency. I strongly recommend that you watching it.

I couldn’t resist translating the prime sieve mentioned in the talk into Python. :) Here it is:


import sys

def filter_multiples(n, numbers):
    return (k for k in numbers if k % n != 0)

def prime_sieve(max):
    p, n = 2, xrange(2, max+1)

    while True:
        yield p
        n = filter_multiples(p, n)
        p = n.next()

def main(argv):
    try:
        n = int(argv[1])
    except (IndexError, ValueError):
        n = 100
    for i in prime_sieve(n):
        print i,
    print

if __name__ == '__main__':
    main(sys.argv)

Leave a Reply