#!/usr/bin/env python # # Show Twin primes # # Author: Yotam Medini yotam.medini@gmail.com -- Created: 2006/March/20 import sys def usage_exit(progname, rc): sys.stderr.write("Usage: %s \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)