fun gcd (a, 0) = a | (0, b) = b | (a, b) where (a < b) = gcd (a, b rem a) | (a, b) = gcd (b, a rem b) fun lcm (a, b) = let val d = gcd (a, b) in a * b div d end