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.