twinprimes.py

#!/usr/bin/env python
#
# Show Twin primes
#
# Author:  Yotam Medini  [email protected] -- Created: 2006/March/20

import sys


def usage_exit(progname, rc):
   sys.stderr.write("Usage: %s <bound number>\n" % progname)
   sys.exit(rc)


# Eratosthenes - helping function.
# Mark by False all multipliers of n in the sieve.
# Note that sieve is a list that is being _changed_ here for the caller.
def mark_mults(sieve, n):
    mult = n*n
    while mult < len(sieve):
        sieve[mult] = False
        mult += n

def eratosthenes(M):
    primes = []
    sieve = (M + 1)*[True]
    n_primes = 0
    n = 2
    while n <= M:
        if sieve[n]:
            primes += [n]
            mark_mults(sieve, n)
        n += 1
    return primes


# Begin program
if len(sys.argv) != 2:
    usage_exit(sys.argv[0], 1)

M = int(sys.argv[1]) # Boundary
primes = eratosthenes(M)
n_primes = len(primes)
n_twins = 0
index = 0
index_next = 1
while index_next < n_primes:
    p  = primes[index]
    q = primes[index_next]
    if p + 2 == q:
        n_twins += 1
        sys.stdout.write("Twin Primes[%3d]:  %4d, %4d\n" % (n_twins, p, q))
    index = index_next
    index_next += 1

sys.stdout.write("There are %d twin primes until %d\n" % (n_twins, M))
sys.exit(0)

Generated by GNU enscript 1.6.4.