# 최대공약수와 최소공배수
def gcd(a, b):
    if a < b:
        (a, b) = (b, a)
    while b != 0:
        (a, b) = (b, a % b)
    return a
 
def solution(n, m):
    return [gcd(n,m), n*m/gcd(n,m)]

# 다른 사람꺼 베낀건데 코드가 엄청 짧고 좋은 것 같다...
# 분석 해볼꺼다....
# 나도 이런 코드를 짜는 사람이 되어야겠다.
# 첫번째 if문은 b가 더크면 순서를 바꾸는것이다. 크거 순서대로 해야하기 때문에
# b 가 0이 아니면 a, b 값을 b, a % b로 바꾸어라는 뜻.
# 반복문이라 계속 바꾸어서 a를 반환하면 최대공약수가 반환된다.
# 그래서 solution에서 최대공약수, (n*m / 최대공약수) => 최소공배수 를 하면 답이 나옴.