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.