solved_ac[Class2][최대공약수와 최소공배수](https://www.acmicpc.net/problem/2609)
두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
24 18
6
72
유클리드 호제법으로 최대공약수와 최소공배수를 구하면 된다.
a와 b라는 자연수가 있다.
최대공약수 : 2
최소공배수 : 10 * 12 // 2 = 60
자연수 입력 받음
최대공약수 함수 gcd를 선언
유클리드 호제법에 따라서 a와 b가 나누어질때까지 계속 돌릴것이기 때문에 재귀함수로 모델링
a와 b가 나누어지게 되면 재귀함수 호출은 멈추어야 하기 때문에 if문을 걸어준다.
그게 아니라면 old b값을 new a값으로 업데이트 시키고 new b값에는 old a와 old b의 나머지 값으로 업데이트 시켜줘서 재귀함수 호출해준다.
최대공약수 함수 result 선언
a와 b 그리고 최대공약수를 곱한 값을 리턴값으로 설정해준다.
import sys
M, N = map(int, sys.stdin.readline().split())
def gcd(M, N):
if M % N == 0:
return N
else:
return gcd(N, M % N)
def result(M, N, gcd):
sum = 1
sum *= M // gcd
sum *= N // gcd
sum *= gcd
return sum
res_gcd = gcd(M, N)
res = result(M, N, res_gcd)
print(res_gcd)
print(res)