:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-basic.py #!/usr/local/bin/python3 import sys def euclid(m, n) : if n==0 : return m return euclid(n, m % n) m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-brute.py #!/usr/local/bin/python3 import sys def euclid(m, n) : for i in range(min(m, n), 0, -1) : if m%i==0 and n%i==0 : return i m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-m-fail.py #!/usr/local/bin/python3 import sys def euclid(m, n) : if m%n==0 : return n return euclid(m, m % n) m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-m-minus-noswap-fail.py #!/usr/local/bin/python3 import sys # use m which is larger -> infinite loop def euclid(m, n) : print(m, n) if n==0 : print() return m return euclid(m, m - n) m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-min.py #!/usr/local/bin/python3 import sys def euclid(m, n) : if n==0 : return m return euclid(n, min(m % n, n - m%n)) m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-minus-noswap-fail.py #!/usr/local/bin/python3 import sys # use m which is larger -> infinite loop def euclid(m, n) : print(m, n) if n==0 : print() return m return euclid(n, m - n) m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-minus-swap.py #!/usr/local/bin/python3 import sys # use gcd(m, n) = gcd(n, m-n) = def euclid(m, n) : if m= n if n==0 : return m return euclid(n, m - n) m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-norecurse.py #!/usr/local/bin/python3 import sys def euclid(m, n) : while n!=0 : tmp = m % n m = n n = tmp return m m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-norecurse2.py #!/usr/local/bin/python3 import sys # this code avoids swapping def euclid(m, n) : while n!=0 : m = m % n if m==0 : return n n = n % m return m m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: euclid-norecurse3.py #!/usr/local/bin/python3 import sys # this code uses Python's structural assignment feature def euclid(m, n) : while n!=0 : (m, n) = (n, m%n) return m m = int(sys.argv[1]) n = int(sys.argv[2]) print(euclid(m, n))