두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
24 18
6
72
최대공약수란, 주어진 두 수 이상의 공약수들 중 가장 큰 수를 의미한다.
최소공배수란, 주어진 두 수 이상의 공배수들 중 가장 작은 수를 의미한다.
최대공약수와 최소공배수의 개념과, 계산하는 방법을 사용하여 구현해보았습니다.
최대공약수의 경우, 두 수를 동시에 나누는 수 중 가장 큰 수로 구현하고, 최소공배수의 경우, 아래 식에 따라 계산하였습니다.
의 최대공약수를 라고 할 때, 최소공배수는
import sys
M, N = map(int, sys.stdin.readline().split())
for i in range(min(M, N), 0, -1):
if M % i == 0 and N % i == 0:
print(i)
print(M * N // i)
break
M, N : 주어진 두 수주어진 두 수 중 더 작은 수부터 나누어가며, 두 수를 모두 나누는 가장 큰 수를 찾습니다.
최대공약수를 찾으면, 최대공약수를 이용하여 최소공배수를 찾아냅니다.
import sys
M, N = map(int, sys.stdin.readline().split())
def GCD(m, n):
return GCD(n, m % n) if n else m
gcd = GCD(M,N)
print(gcd)
print(M * N // gcd)
최대공약수를 구하는 알고리즘인 유클리드 호제법을 활용하여 코드를 작성할 수도 있습니다.
파이썬 3.9버전 이상이라면, 최대공약수와 최소공배수를 구할 수 있는 내장 함수가 추가되었습니다.
해당 함수들을 사용하여 간단하게 최대공약수와 최소공배수를 구할 수 있습니다.
import math
import sys
M, N = map(int, sys.stdin.readline().split())
print(math.gcd(M, N))
print(math.lcm(M, N))