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)

#include <stdio.h>

void gcd(int *, int *);
void getPair(int *, int *);
void lcm(int *, int *);

int g, l;

int main()
{
    int a, b;

    while(1){
    getPair(&a, &b);
        if (a > 0 && b > 0){
            gcd(&a, &b);
            lcm(&a, &b);
            printf("%d %d\n", g, l);
        }
        else
            break;
    }
    return 0;
}

void gcd(int *a, int *b)
{
    int r;
    int A, B;

    A = *a, B = *b;
    do{
        r = *a % *b;
        *a = *b;
        *b = r;
    }while(r != 0);
    g = *a;
    *a = A, *b = B;
}

void getPair(int *pa, int *pb)
{
    printf("最大公約数と最小公倍数を求めたい二つの整数を入力してください:\n");
    scanf("%d %d", pa, pb);
}

void lcm(int *a, int *b)
{
    l = (*a * *b) / g;
}