gcd3.py

#!/usr/bin/env python
#
# Get 3 numbers from user, print their gcd (Greatest Common Divisor).
#
# Author:  Yotam Medini  [email protected] -- Created: 2005/November/06
#

import sys
import string

# Check for 3 parameters
if len(sys.argv) != 1+3:
    sys.stderr.write("Usage:  %s <number> <number> <number>\n" % sys.argv[0])
    sys.exit(1)

# Convert the two command line parameters strings to positive integers.
a = [0, 0, 0]  # Dummy place for 3 integers
i = 0
while i < 3:
   a[i] = int(sys.argv[i + 1]) # skip the command-name
   if a[i] < 0:
       a[i] = -a[i]
   i = i + 1
   
current_gcd = a[0]
i = 1
while i <= 2:
    b = a[i]
    # Compute:   gcd(current_gcd, b)
    # Let's always have current_gcd >= b
    if current_gcd < b:
        # swap  current_gcd <-> b
        temp = current_gcd
        current_gcd = b
        b = temp

    if current_gcd > 0:
        # Now the beautiful Euclid algorithm. Short and smart.
        while b != 0:
            residue = current_gcd % b
            current_gcd = b
            b = residue
    i = i + 1

sys.stdout.write("gcd(%d, %d, %d) = " % (a[0], a[1], a[2]))
if current_gcd == 0:
    sys.stdout.write("infinity\n")
else:
    sys.stdout.write("%d\n" % current_gcd)
sys.exit(0)

Generated by GNU enscript 1.6.4.