AOJ 0005 GCD and LCM

リンク AOJ 0005 GCD and LCM

方針

最大公約数を求めるためにBigIntegerクラスのgcdメソッドを使いました。
また、2つの正の整数a,bの最大公約数をgcd(a,b)と表現し、最小公倍数をlcm(a,b)と表したとき、以下のような関係

        • gcd(a,b)lcm(a,b) = ab
        • \Rightarrow lcm(a,b) = \frac{ab}{gcd(a,b)} 

を用いてlcm(a,b)を簡単に求めることができます。


例:
a = 6, b = 15とする。
このとき、最大公約数は3であるので、求める最小公倍数は

        • lcm(6,15) = \frac{6 \times 15}{3} = 30 となります。

ソース

import java.util.*;
import java.math.*;
public class Main {
    static Scanner sc = new Scanner(System.in);
    static BigInteger a, b;
    public static void main(String[] args) {
        while(read()){
            solve();
        }

    }
    static boolean read(){
        if(!sc.hasNext())
            return false;
        a = sc.nextBigInteger();
        b = sc.nextBigInteger();
        return true;
    }
    static void solve(){
        System.out.print(gcd(a, b) + " ");
        System.out.println(lcm(a, b));
    }
    static BigInteger gcd(BigInteger a, BigInteger b){
        return a.gcd(b);
    }
    static BigInteger lcm(BigInteger a, BigInteger b){
        return a.multiply(b).divide(gcd(a,b));
    }
}