Python을 활용한 다중 숫자 입력의 최소 공배수(LCM) 계산 방법: 원리와 구현 코드 설명

Posted by

최소 공배수(LCM, Least Common Multiple)는 두 개 이상의 숫자의 공통 배수 중 가장 작은 값을 의미한다. LCM은 수학에서 중요한 개념이며, 컴퓨터 과학에서도 다양한 문제를 해결하는 데 자주 사용된다. 이번 포스트에서는 Python을 사용해 여러 숫자의 LCM을 계산하는 방법을 다룰 예정이다. Python의 내장 라이브러리를 사용하는 방법과 직접 알고리즘을 구현하는 방법을 모두 알아 보도록 하자.

최소 공배수(LCM)란?

LCM은 두 개 이상의 숫자를 나눌 수 있는 가장 작은 양의 정수이다.
예를 들어, 12와 15의 LCM은 60이다. 이는 12와 15 모두를 나눌 수 있는 가장 작은 숫자가 60이기 때문이다.

예시

  • 12의 배수: 12, 24, 36, 48, 60, 72, 84, …
  • 15의 배수: 15, 30, 45, 60, 75, 90, 105, …
  • 첫 번째 공통 배수는 60이므로, 12와 15의 LCM은 60이다.

Python의 내장 라이브러리를 사용하여 LCM 계산하기

Python에서는 math.gcd 함수를 사용해 두 숫자의 최대 공약수(GCD)를 계산한 다음, 이를 활용하여 LCM을 구할 수 있다. LCM과 GCD 간의 관계를 이용한 공식은 다음과 같다

LCM(a, b) = {{\left\vert a \times b \right\vert} \over {GCD(a, b)}}

여러 숫자의 LCM을 계산하기 위해서는 functools 모듈의 reduce 함수를 사용해 이 과정을 반복할 수 있다.

코드 예제

import math
from functools import reduce

# 두 숫자의 LCM을 구하는 함수
def lcm(a, b):
    return abs(a * b) // math.gcd(a, b)

# 여러 숫자의 LCM을 구하는 함수
def lcm_multiple(*numbers):
    return reduce(lcm, numbers)

# 예제 사용
numbers = [12, 15, 20]
result = lcm_multiple(*numbers)
print(f"입력된 숫자 {numbers}의 최소 공배수는 {result}이다.")

코드 설명

  • import math: math 모듈을 가져온다. 이 모듈은 다양한 수학적 함수를 제공하며, 여기서는 math.gcd를 사용한다.
  • from functools import reduce: reduce 함수는 이터러블(iterable) 객체에 대해 이진 함수를 반복적으로 적용하여 하나의 값으로 줄이는 데 사용된다.
  • lcm(a, b) 함수: 두 숫자 ab의 LCM을 계산한다. 이 함수는 곱셈과 GCD를 결합한 공식을 사용한다.
  • lcm_multiple(*numbers) 함수: 여러 숫자를 입력받아 그들의 LCM을 계산한다. 이 함수는 reduce를 사용하여 lcm 함수를 반복적으로 적용한다. 예를 들어, 리스트 [12, 15, 20]이 주어지면, reduce는 먼저 lcm(12, 15)를 계산하고, 그 결과와 20의 LCM을 계산한다.

라이브러리를 사용하지 않고 LCM 직접 구현하기

Python의 내장 라이브러리를 사용하지 않고도, LCM을 계산하는 알고리즘을 직접 구현할 수 있다. 이 방법은 GCD와 LCM의 관계를 활용하여 GCD를 계산한 후, 이를 사용해 LCM을 구하는 방식이다.

12, 15, 20의 LCM을 직접 계산하기

  • 1단계
    먼저 첫 두 숫자, 12와 15의 LCM을 계산한다
    LCM(12,15) = {{\left\vert 12 \times15 \right\vert} \over {GCD(12,15)}}
    먼저 12와 15의 GCD를 구한다
    GCD(12,15) = 3
    이제 LCM을 계산한다
    LCM(12,15) = {180 \over 3} = 60
  • 2단계
    1단계 결과를 사용하여 다음 숫자인 20과의 LCM을 계산한다
    LCM(60,20) = {{\left\vert 60 \times 20 \right\vert}\over {GCD(60,20)}}
    먼저 60과 20의 GCD를 구한다
    GCD(60,20) = 20
    이제 LCM을 계산한다
    LCM(60,20) = {1200 \over 20}=60
  • 결과
    12, 15, 20의 LCM은 60이다.

코드 예제

# 두 숫자의 GCD를 구하는 함수 (유클리드 알고리즘 사용)
def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

# 두 숫자의 LCM을 구하는 함수
def lcm(a, b):
    return abs(a * b) // gcd(a, b)

# 여러 숫자의 LCM을 구하는 함수
def lcm_multiple(*numbers):
    result = numbers[0]  # 첫 번째 숫자를 초기 결과값으로 설정한다.
    for number in numbers[1:]:  # 나머지 숫자들을 순차적으로 반복한다.
        result = lcm(result, number)  # 현재 결과와 다음 숫자의 LCM을 계산하여 result에 저장한다.
    return result  # 최종 LCM 값을 반환한다.

# 예제 사용
numbers = [12, 15, 20]
result = lcm_multiple(*numbers)
print(f"입력된 숫자 {numbers}의 최소 공배수는 {result}이다.")

코드 설명

  • gcd(a, b) 함수: 유클리드 알고리즘을 사용하여 두 숫자 ab의 GCD를 계산한다.
  • lcm(a, b) 함수: 두 숫자 ab의 LCM을 계산하는 함수이다.
  • lcm_multiple(*numbers) 함수: 여러 숫자의 LCM을 계산한다. 첫 번째 숫자를 초기 값으로 설정하고, 나머지 숫자들을 반복적으로 lcm 함수에 대입하여 최종 LCM을 계산한다.

GCD와 LCM의 관계 이해하기

LCM을 효율적으로 계산하기 위해서는 GCD와 LCM 간의 관계를 이해하는 것이 중요하다. LCM과 GCD의 곱은 두 숫자의 곱과 같다

LCM(a,b) \times GCD(a,b) = \left\vert a \times b \right\vert

이 관계를 활용하면, LCM을 GCD를 통해 계산할 수 있다. 이는 특히 큰 숫자에 대해 계산할 때 효율적이며, 더 쉽게 계산할 수 있다.

결론

이번 포스트에서는 Python을 사용해 여러 숫자의 LCM을 계산하는 두 가지 방법, 즉 내장 라이브러리를 사용하는 방법과 직접 알고리즘을 구현하는 방법을 다루었다. LCM의 원리를 이해하고, 제공된 코드 예제를 통해 Python 프로그래밍 능력이 향상되길 바란다.

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다