최대공약수와 최소공배수 출처분류
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 | 128 MB | 35346 | 21082 | 17328 | 62.924% |
문제
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
유클리드 호제법의 방법을 사용하면 최대공약수를 쉽게 구할 수 있습니다.
유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란 말은 두 수가 서로(互) 상대방 수를 나누어(除)서 결국 원하는 수를 얻는 알고리즘을 나타낸다. 2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다.
최대 공약수를 구하면 최소 공배수를 구하기 쉬워집니다. 두 값을 곱하고 이 값을 최대 공약수로 나눈다면 그 값이 공배수에서 가장 작은 값이 될 것 이기 때문입니다.
코드는 간단합니다.
A, B = list(map(int, input().split(' ')))
a, b = A, B
while not b:
a = a % b
a, b = b, a
print(a)
print(A * B // a)