본문으로 바로가기

백준_최대공약수와 최소공배수

category 알고리즘 2021. 2. 27. 23:27

최대공약수와 최소공배수 출처분류

시간 제한메모리 제한제출정답맞은 사람정답 비율

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)

'알고리즘' 카테고리의 다른 글

백준_부등호  (0) 2021.03.07
백준_유기농배추  (0) 2021.03.07
백준_퇴사  (0) 2021.02.21
백준_암호만들기  (0) 2021.02.21
백준_12100  (0) 2021.02.21