#2609. 최대공약수와 최소공배수
백준
의 브론즈1티어
문제이다.
📖Problems
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력
입력
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
출력
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
예제 입력 1
1
2
24 18
예제 출력 1
1
2
6
72
🔍Approach
- 최대공약수 구하는 법
- 유클리드 호제법을 통해 최대공약수를 쉽게 구할 수 있다.
- 유클리드 호제법으로 최대공약수를 구하는 방법은 다음과 같다.
두 자연수
a
,b
에 대하여a
를b
로 나눈 나머지temp
에 대해a
와b
의 최대공약수는b
와temp
의 최대공약수와 같다. 이를 계속 반복하며b=0
이 될 때,a
값이 바로 최대공약수이다. (재귀와 반복이 느껴진다..!!)1 2 3 4 5
while b > 0 : tmp = a % b a = b b = tmp return a
2. 최소공배수 구하는 법
- gcd는 a와 b의 최대공약수이다. x와 y는 서로소 관계라고 할 때,
- 입력값인 두 정수 a, b에 대하여
**a = x * gcd , b = y * gcd**
이므로 최소공배수는a*b // gcd
가 된다..!!
🚩My submission
Flow
- 입력받기
gcd
와lcm
은 각각 최대공약수와 최소공배수를 의미하며 0으로 초기화한다.gcd
를n
을m
으로 나누었을 때의 나머지를 최대공약수에 저장하고,n
과m
,gcd
를 바꾸어가며 반복적으로 연산을 수행한다.- 3은
n % m
이 0이 아닐 때 반복한다. lcm
은n
값과m
값을 곱한 값에 최대공약수gcd
를 나눈 값이다. 해당 연산을 수행한다.- 이후
gcd
,lcm
순으로 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
n, m = map(int, input().split())
gcd, lcm = 0, 0
n2, m2 = n, m
# 최대공약수 = gcd, 최소공배수 = lcm
while n % m != 0:
gcd = n % m
n = m
m = gcd
lcm = (n2 * m2) // int(gcd)
print(gcd)
print(lcm)
어째 한번에 맞는 게 없냐…
🚩Others submission
참고 사이트 : https://animoto1.tistory.com/entry/백준-2609-최대공약수와-최소공배수
일단 함수화 시켜보자
위에서 작성한 코드를 함수로 변환한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import sys
input = sys.stdin.readline
a,b = map(int,input().split())
def gcd_r(a,b) :
if b == 0 :
return a
else :
return gcd_r(b,a%b)
def gcd_for(a,b) :
while b > 0 :
tmp = a % b
a = b
b = tmp
return a
def lcm(a,b) :
return a*b//gcd_r(a,b)
print(gcd_r(a,b))
print(lcm(a,b))
💡TIL
- 최대공약수와 최소공배수는 초등학교 때 배운 것인데 성인되니 다 까먹었다. 하지만 이 문제를 통해 최대공약수와 최소 공배수의 규칙을 찾고 코드로 구현시켰다. (일종의 공식처럼 코딩에서 사용되고 있다)
- 최대공약수 구하는 법 (유클리드 호제법)
두 자연수
a
,b
에 대하여a
를b
로 나눈 나머지temp
에 대해a
와b
의 최대공약수는b
와temp
의 최대공약수와 같다. 이를 계속 반복하며b=0
이 될 때,a
값이 바로 최대공약수1 2 3 4 5
while b > 0 : tmp = a % b a = b b = tmp return a
- 최대공약수 구하는 법 (유클리드 호제법)
2. 최소공배수 구하는 법
- gcd는 a와 b의 최대공약수이다. x와 y는 서로소 관계라고 할 때,
입력값인 두 정수 a, b에 대하여
**a = x * gcd , b = y * gcd**
이므로 최소공배수는a*b // gcd
가 된다.- 또 한 번에 여러 ‘연산’을 사용해야 할 경우, 함수를 사용하는 것이 더 편하다.