gcdlcm.py
#!/usr/bin/env python
#
# Compute GCD & LCM of list of numbers given on command line.
#
# Author: Yotam Medini [email protected] -- Created: 2005/December/04
#
import sys
def gcd(m, n):
if m < 0:
m = -m
if n < 0:
n = -n
if m < n:
t = m; m = n; n = t; # swap
# Now we have: m >= n >= 0
while n > 0: # Euclid
remainder = m % n
m = n
n = remainder
return m
def lcm(m, n):
multiple = m * n
if multiple != 0: # Otherwise, lcm is actually infinity
if multiple < 0:
multiple = -multiple # Let's be positive
multiple = multiple / gcd(m, n)
return multiple
# Begin the program
# Check for any parameter, otherwise help
if len(sys.argv) == 1:
sys.stderr.write("Usage: %s <number1> ... <numberN>\n" % sys.argv[0])
sys.exit(1)
curr_gcd = 0
curr_lcm = 1
ai = 1
anyNonZero = False
while ai < len(sys.argv):
num = int(sys.argv[ai])
anyNonZero = anyNonZero or (num != 0)
curr_gcd = gcd(curr_gcd, num)
curr_lcm = lcm(curr_lcm, num)
ai = ai + 1
if anyNonZero:
sgcd = "%d" % curr_gcd
slcm = "%d" % curr_lcm
else: # Special pathological case
sgcd = "Infinity"
slcm = "0"
sys.stdout.write("gcd = %s, lcm = %s\n" % (sgcd, slcm))
sys.exit(0)
Generated by GNU enscript 1.6.4.