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 C# (judge verdict: Time Limit Exceeded)

using System.Collections;
using System;
using System.Collections.Generic;

public class Program{

	public static void Main(){

		string line;
		List <string> numberList = new List<string> ();

		// ??\???
		while (true) {

			line = Console.ReadLine ();
			if (line != null) {
				numberList.Add (line);
			} else {
				break;
			}
		}

		foreach (var n in numberList) {

			string[] numbers = n.Split (' ');

			long least = LeastCommonMultiple (int.Parse(numbers[0]), int.Parse(numbers[1]));
			long greatest = GreatestCommonDivisor (int.Parse(numbers[0]), int.Parse(numbers[1]));

			// ??????
			Console.WriteLine ("{0} {1}",greatest, least);
		}

	}

	// ????°???¬?????°
	public static long LeastCommonMultiple(long n1, long n2){

		long temp=Math.Max(n1,n2);
		n2=Math.Min(n1,n2);//n2?????????????????°???????°????

		n1=temp;//n1?????????????????°????????§???

		long result = 0;
		long len = n1 * n2;

		for (long i = n1; i <= len; i++) {
			if (i % n1 == 0 && i % n2 == 0) {
				result = i;
				break;
			}
		}

		return result;


//		long product=n1*n2;//?±?????????°???????§?
//
//		while(n2!=0)
//		{
//			n1=n1>n2?n1:n2;//???n1????????°??§???n2????????°
//			long m=n1%n2;
//			n1=n2;
//			n2=m;
//		}
//		return(product/n1);//????°???¬?????°
	}

	// ?????§??¬?´???°
	public static long GreatestCommonDivisor(long n1, long n2){


		long temp=Math.Max(n1,n2);
		n2=Math.Min(n1,n2);//n2?????????????????°???????°????

		n1=temp;//n1?????????????????°????????§???

		long result = 1;


		for (long i = n2; i >= 1; i--) {

			if (n1 % i == 0 && n2 % i == 0) {
				result = i;
				break;
			}
		}

		return result;

	}
}