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.