Algorithm 뽀개기

[백준] 2609 최대공약수와 최소공배수 (Python)

daun_up 2024. 7. 5. 13:29

이런! 최소공배수가 뭔지 기억이 안 날 뻔 했다. 심각한 수학 실력... 수학 포기하지 말걸~~~,,, 컴퓨터 공학과를 꿈꾸는 청소년 여러분 수학 포기하지 마세요 제발... 최대 공약수는 유클리드 호제법으로 구할 수 있다. 유클리드 호제법은 나누고 나눈 수를 나머지로 나누는 알고리즘이다.

유클리드 호제법

먼저 큰 수를 작은 수로 나눈 나머지를 구한다. 그 다음 나눴던 수를 나머지로 또 나누어 나머지를 구한다. 나머지가 0 이 되었을 때 마지막 계산에서 나누는 수로 사용된 숫자가 두 수의 최대공약수가 된다.

 

이를 반복문과 재귀함수로 구현할 수 있다. 

# 반복문
def gcd(a,b) :
    while b != 0 :
        a, b = b, a % b
    return a
# 재귀 함수
 def gcd (a,b) :
     if b == 0 :
         return a
     return gcd(b, a % b)
n, m = map(int, input().split())

def gcd(a,b) :
    while b != 0 :
        a, b = b, a % b
    return a
    
def lcm(a,b) :
    return a * b // gcd(a,b)
    
print(gcd(n,m))
print(lcm(n,m))