오뚝이개발자

[백준2609] 최대공약수와 최소공배수 본문

코딩 테스트/백준

[백준2609] 최대공약수와 최소공배수

땅어 2020. 3. 3. 15:31
728x90
300x250

문제


https://www.acmicpc.net/problem/2609

 

2609번: 최대공약수와 최소공배수

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를,둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

www.acmicpc.net

 

풀이


방법 1)

div가 2부터 시작해서 num1과 num2를 모두 나누어 떨어지게 하는 수를 반복적으로 찾아 gcd를 구한다. lcm은 gcd를 이용해 구한다.

 

방법 2)

유클리드 호제법 이용 -> gcd(a,b)=gcd(b,a%b)를 반복적으로 시행해서 a%b가 0이 되는 순간 b가 gcd임을 이용

 

방법 3)

import math를 하여 math.gcd(a,b)를 이용하는 아주 편리한 방법도 있다.

 

코드



num1, num2 = input().split()
num1 = int(num1)
num2 = int(num2)
gcd = 1
lcm = 1
div = 2
while True:
    smaller = min(num1, num2)
    if div > smaller:
        break
    if num1 % div == 0 and num2 % div == 0:
        num1 = num1//div
        num2 = num2//div
        gcd *= div
        div = 1
    div += 1
lcm = gcd * num1 * num2
print(gcd)
print(lcm)    

 

728x90
300x250

'코딩 테스트 > 백준' 카테고리의 다른 글

[백준1476] 날짜 계산  (0) 2020.03.05
[백준2309] 일곱 난쟁이  (0) 2020.03.05
[백준6588] 골드바흐의 추측  (0) 2020.03.04
[백준9613] GCD 합  (0) 2020.03.04
[백준1934] 최소공배수  (0) 2020.03.03
Comments