https://www.acmicpc.net/problem/2609
유클리드 호재법으로 풀면 아주 쉽다
def gcd(x, y):
if y == 0:
return x
return(gcd(y, x % y))
def lcm(x, y):
return x * y // gcd(x, y)
a, b = map(int, input().split())
print(gcd(a, b))
print(lcm(a, b))
호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다.
2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a > b),
a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.
최소공배수는 a, b의 곱을 a, b의 최대 공약수로 나누면 나오게 된다.
(최소공배수 x 최대 공약수) = gcd^2 a b [a, b은 서로수] => a * b
를 이용한 방법이다.
또 까먹어서 다시 풀었다...
까먹지 않게 꼭 외우자