백준

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

미스터 한뺑 2023. 4. 17. 13:59
반응형

1. 문제

 

문제 두개의 자연수를 입력받아 최대 공약소와 최소 공배수를 출력하는 프로그램을 작성하시오

 

2. 입력

첫째 줄에는 두개 의 자연수가 주어진다. 이 둘은 10000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

 

3.출력

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

 


4. 풀이

import math

a, b = map(int, input().split())

#최대공약수
print(math.gcd(a, b))
#최소공배수
print(math.lcm(a, b))

python은 math의 라이브러리가 있어서 수학의 대한 식이 나와 있다. gcd 는 최대 공약수 함수이고 lcm은 최소공배수 함수이다. 

 

5.다른 풀이

유클리드 호제법을 사용해서 푸는 사람들이 대부분 있어서 코드 리뷰를 하고 싶었다.

유클리드 호제법은 최대공약수를 쉽게 구할 수 있는 알고리즘 주의 하나이다. 이 알고리즘은 식을 간결하게 해주는 특징이 있다. 두 수 a 와 b가 있다고 할 때, a와 b의 최대공약수는 b와 a 와 b 나눈 나머지의 최대공약수가 서로 같다라는 것이다.

 

예시 입력으로 보면,

gcd(24, 18) = gcd(18, 6) = gcd(6, 0)인 것이다!

여기서 b가 0이 되는 순간의 6이 바로 최대공약수가 된다.

 

최소공배수 구하는 식은 a*b/gcd(a,b)이다 . 

 

a, b = map(int, input().split())

def gcd(a,b):
  while b != 0: #b가 0이 될까지 돌린다.
      a = a % b
      a, b = b, a
  return a  # b가 0이 되면 while문이 끝나므로 a가 최대공약수 

# 최대공약수
print(gcd(a,b))

#최소공배수
print(a*b//gcd(a,b))
반응형