Problem:
GCD and LCM

Write a program which computes the greatest common divisor (GCD) and the least common multiple (LCM) of given a and b.

Input

Input consists of several data sets. Each data set contains a and b separated by a single space in a line. The input terminates with EOF.

Constraints

0 < a, b ≤ 2,000,000,000

LCM(a, b) ≤ 2,000,000,000

The number of data sets ≤ 50

Output

For each data set, print GCD and LCM separated by a single space in a line.

Sample Input

8 6
50000000 30000000

Output for the Sample Input

2 24
10000000 150000000

Solution in JAVA (judge verdict: Accepted)

import java.util.Scanner;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		doIt();

	}
	public static void doIt(){
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			long a = sc.nextLong();
			long b = sc.nextLong();
			System.out.println(getLCM(a, b) + " " + getGCD(a, b));
		}
//		System.out.println(getGCD(8, 6));;
//		System.out.println(getGCD(50000000, 30000000));;
//		System.out.println(getGCD(3, 1));;
	}
	
	//a >= b
	public static long getGCD(long a, long b){
		long ta = a, tb = b;
		while(true){
			if(ta == tb){
				break;
			}
			while(ta > tb){
				tb += b;
			}
			while(tb > ta){
				ta += a;
			}
			//System.out.println("ta = " + ta + ", tb = " + tb);
			
		}
		
		return ta;
	}
	
	//a >= b
	public static long getLCM(long a, long b){
		long p, q, r;
		p = a;
		q = b;
		r = b;
		long tmp;
		do{
			tmp = r;
			r = p % q;
			p = q;
			q = r;
			
		}while(r != 0);
		
		return tmp;
	}

}