문제:
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
# 두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
a, b = map(int, input().split())
# 유클리드 호제법 (최대공약수 구하기)
def gcd(m,n):
# 기본 전제로 m이 n보다 더 큰 수이어야 한다
if m < n: # n이 더 크면 자리를 바꿔준
m, n = n, m
if n == 0: # 만약 두 수 중에 하나가 0이면 다른 수가 최대공약수가 된다
return m
if m % n == 0: # 만약 두 수가 나누어 떨어지면 n이 최대공약수!
return n
else:
# 이 구문이 유클리드 호제법의 핵심이 된다
# 위의 세가지 조건에도 해당하지 않을 경우,
# m은 n로 나누어 떨어지지 않기 때문에, m을 n으로 나눈 나머지를 구한다. ≫ m % n
# n은 (m % n)으로 나누어 떨어지지 않기 때문에, n을 (m % n)으로 나눈 나머지를 구한다. ≫ n % (m % n)
# (m % n)는 (n % (m % n))으로 나누어 떨어질 때까지 반복한다.
return gcd(n, m%n)
print(gcd(a, b))
# 최소공배수는 두 수를 곱한 값에 최대공약수를 나누어주면 끝이다.
print(int(a * b / gcd(a, b)))
결과:
반응형
'백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 25083번 새싹 (파이썬) (0) | 2022.08.22 |
---|---|
백준 알고리즘 11653번 소인수분해 (파이썬) (0) | 2022.08.20 |
백준 알고리즘 2775번 부녀회장이 될테야 (파이썬) (0) | 2022.08.17 |
백준 알고리즘 2480번 주사위 세개 (파이썬) (0) | 2022.08.15 |
백준 알고리즘 1085번 직사각형에서 탈출 (파이썬) (0) | 2022.08.15 |