728x90
https://www.acmicpc.net/problem/13241
문제 설명
정수 B에 0보다 큰 정수인 N을 곱해 정수 A를 만들 수 있다면, A는 B의 배수이다.
예:
- 10은 5의 배수이다 (5*2 = 10)
- 10은 10의 배수이다(10*1 = 10)
- 6은 1의 배수이다(1*6 = 6)
- 20은 1, 2, 4,5,10,20의 배수이다.
다른 예:
- 2와 5의 최소공배수는 10이고, 그 이유는 2와 5보다 작은 공배수가 없기 때문이다.
- 10과 20의 최소공배수는 20이다.
- 5와 3의 최소공배수는 15이다.
당신은 두 수에 대하여 최소공배수를 구하는 프로그램을 작성 하는 것이 목표이다.
풀이 과정
- 나의 풀이
① 최대공약수 구하는 법
유클리드 호제법을 통해 최대공약수를 쉽게 구할 수 있다.
유클리드 호제법이란 기원전 300년 전에 나온 가장 오래된 알고리즘으로 유명하다.
유클리드 호제법으로 최대공약수를 구하는 방법은 다음과 같다.
○ 두 자연수 a,b에 대하여 a를 b로 나눈 나머지 r에 대해 a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이를 계속 반복하며 b가 0이 될 때, a값이 바로 최대공약수이다. (재귀와 반복이 느껴진다..!!)
② 최소공배수 구하는 법
입력값인 두 정수 a,b에 대하여 a = x * gcd , b = y * gcd (단, gcd는 a와 b의 최대공약수이고, x와 y는 서로 서로소 관계이다.) 이므로 최소공배수는 a*b//gcd가 된다..!!
이를 코드로 구현하면 다음과 같다.
# 1850 최대공약수
import sys
input = sys.stdin.readline
def gcd_r(a,b) :
if b == 0 :
return a
else :
return gcd_r(b,a%b)
def lcm(a,b) :
return a*b//gcd_r(a,b)
a,b = map(int,input().split())
print(lcm(a,b))
○ gcd_for 함수는 반복문을 이용하였고, gcd_r 함수는 재귀를 이용하였다.
'Algorithm > math' 카테고리의 다른 글
[백준] 2609 최대공약수와 최소공배수 (파이썬 Python) (0) | 2021.08.13 |
---|---|
[백준] 9613 GCD 합 (파이썬 Python) (0) | 2021.08.13 |
[백준] 1934 최소공배수 (파이썬 Python) (0) | 2021.08.13 |
[백준] 2702 초6 수학 (파이썬 Python) (0) | 2021.08.13 |
[백준] 1193 분수 찾기 (파이썬 Python) (0) | 2021.08.11 |