https://www.acmicpc.net/problem/2609
2609번: 최대공약수와 최소공배수
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
www.acmicpc.net
풀이 과정
최대공약수는 유클리드 호제법을 이용해서 구할 수 있다.
GCD(a, b)를 a, b의 최대공약수라고 하고 a % b = r 이라고 하면 GCD(a, b) = GCD(b, r)이 성립한다. 이 과정을 반복해서 GCD(c, 0)이 되면 c가 두 수 a, b의 최대공약수다.
ex) GCD(24, 16) = GCD(16, 8) = GCD(8, 0) => 24와 16의 최대공약수는 8
최소공배수 LCM은 a*b / GCD임이 알려져 있으니 이를 통해 구하면 된다.
ex) LCM(24, 16) = 24 * 16 / 8 = 48 => 24와 16의 최소공배수는 48
코드
import sys
def gcd(a, b):
if b == 0: return a
else: return gcd(b, a%b)
lcm = lambda a, b: a*b//gcd(a, b)
a, b = map(int, input().split())
print(gcd(a, b))
print(lcm(a, b))
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
백준 1929 - 소수 구하기 [파이썬] (0) | 2022.04.01 |
---|---|
백준 1978 - 소수 찾기 [파이썬] (0) | 2022.03.26 |
백준 10430 - 나머지 [파이썬] (0) | 2022.03.26 |
백준 17299 - 오등큰수 [파이썬] (1) | 2022.03.26 |
백준 17298 - 오큰수 [파이썬] (0) | 2022.03.25 |