// -----------
// GCDLCM.java
// -----------
import java.math.BigInteger;
final class GCDLCM {
/**
* O(n) in space
* O(n) in time
* Precondition: (m >= 0) && (n >= 0)
*/
public static long gcd (long m, long n) {
assert (m >= 0) && (n >= 0);
if (m == 0)
return n;
return gcd(n % m, m);}
/**
* O(n) in space
* O(n) in time
* Precondition: (m >= 0) && (n >= 0) && ((m > 0 || n > 0))
*/
public static long lcm (long m, long n) {
assert (m >= 0) && (n >= 0) && ((m > 0 || n > 0));
return (m * n) / gcd(m, n);}}
final class GCDLCMTest {
public static void main (String[] args) {
System.out.println("GCDLCM.java");
assert GCDLCM.gcd( 0, 0) == 0;
assert GCDLCM.gcd( 0, 1) == 1;
assert GCDLCM.gcd( 1, 0) == 1;
assert GCDLCM.gcd( 6, 9) == 3;
assert GCDLCM.gcd( 9, 6) == 3;
assert GCDLCM.gcd(21, 35) == 7;
assert GCDLCM.gcd(35, 21) == 7;
assert GCDLCM.gcd(22, 35) == 1;
assert new BigInteger("0").gcd(new BigInteger("0")).equals(new BigInteger("0"));
assert new BigInteger("0").gcd(new BigInteger("1")).equals(new BigInteger("1"));
assert new BigInteger("1").gcd(new BigInteger("0")).equals(new BigInteger("1"));
assert new BigInteger("6").gcd(new BigInteger("9")).equals(new BigInteger("3"));
assert new BigInteger("9").gcd(new BigInteger("6")).equals(new BigInteger("3"));
assert new BigInteger("21").gcd(new BigInteger("35")).equals(new BigInteger("7"));
assert new BigInteger("35").gcd(new BigInteger("21")).equals(new BigInteger("7"));
assert new BigInteger("22").gcd(new BigInteger("35")).equals(new BigInteger("1"));
assert GCDLCM.lcm( 0, 1) == 0;
assert GCDLCM.lcm( 1, 0) == 0;
assert GCDLCM.lcm( 6, 9) == 18;
assert GCDLCM.lcm( 9, 6) == 18;
assert GCDLCM.lcm(21, 35) == 105;
assert GCDLCM.lcm(35, 21) == 105;
assert GCDLCM.lcm(22, 35) == 770;
System.out.println("Done.");}}
syntax highlighted by Code2HTML, v. 0.9.1