본문 바로가기
프로그래밍/Python

[Python] lcm 함수 : 최소공배수

by 빛밤하늘 2021. 6. 27.
반응형

2021.06.17 - [프로그래밍/Python] - [Python] gcd 함수 : 최대공약수

 

[Python] gcd 함수 : 최대공약수

알고리즘 문제들을 풀다 보면 누구나 한 번쯤은 최대공약수, 최소공배수를 구해야 되는 문제를 만날 것입니다. 최대공약수와 최소공배수를 구하기 위해 사용하는 알고리즘으로 유클리드 호제

brightnightsky77.tistory.com

 

 

 

앞서 최대공약수를 구하는 함수인 gcd 함수에 대해서 포스팅했습니다.

이어서 최소공배수를 반환하는 함수인 lcm 함수에 대해서 포스팅해보겠습니다.

 

 

 

1. 최소공배수

배수는 어떤 정수가 있을 때, 그 정수에 같거나 다른 정수를 곱한 수입니다.

공배수는 어떤 정수들이 있을 때, 그 정수들의 공통인 배수들을 말합니다.

최소공배수는 공배수들 중에서 가장 작은 공배수입니다.

 

영어로는 Least Common Multiple 혹은 Lowest Common Multiple라고 하며

이를 약자로 줄여서 LCM이라고 합니다.

gcd 함수와 마찬가지로 lcm 함수도 이 영어의 약자를 따와서 만든 것 같습니다.

 

밑의 링크는 배수, 공배수, 최소공배수에 대한 위키백과 링크입니다.

 

배수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 오른쪽 수가 왼쪽 수의 배수가 아닐 때 사용하는 기호 수론에서, 어떤 수의 배수(倍數, 영어: multiple)는 그 수에 정수를 곱한 수이다. 반대로 말해 그 수에 의해

ko.wikipedia.org

 

공배수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 공배수(公倍數)란 두 개 이상의 자연수의 공통인 배수를 말한다. 예를 들어 3과 4의 공배수는 3의 배수이기도 하고 4의 배수이기도 한 수이다. 두 수의 공배수 중

ko.wikipedia.org

 

최소공배수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 수론에서, 여러 개의 정수/다항식/환의 원소의 공배수(公倍數, 영어: common multiple)는 그들 모두의 배수가 되는 정수/다항식/환의 원소이다. 최소공배수(最小公倍

ko.wikipedia.org

 

 

 

 

 

 

 

 

2. lcm 함수

2-1. 사용법과 결과

lcm 함수의 사용법은 다음과 같습니다.

 

lcm 함수를 호출하기 전, 맨 상단에 import math나 from math import lcm을 선언해

math 모듈을 먼저 호출해야 lcm 함수를 사용할 수 있습니다.

import 구문을 어떻게 사용하는가에 따라 lcm 함수 앞에 math.를 붙이거나 붙이지 않고 사용합니다.

 

  • math.lcm('정수1', '정수2', '정수3', ... , '정수n')
# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
import math

print("math.lcm 함수 사용:", math.lcm(10, 100))

import math 사용

 

  • lcm('정수1', '정수2', '정수3', ... , '정수n')
# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("lcm 함수 사용:", lcm(10, 100))

from math import lcm 사용

 

코드를 실행시키면 매개변수에 넣은 숫자들의 최소공배수를 반환합니다.

 

gcd 함수와는 달리 lcm 함수는 3.9 버전에서 처음 추가되었습니다.

lcm 함수를 사용하는 코드를 제대로 작성했는데도 밑의 사진과 같이

math 모듈에서 lcm을 import 할 수 없다는 ImportError 오류가 뜬다면

3.9 이상 버전의 파이썬이 아니기 때문입니다.

 

 

 

2-2. 주의점

위에서 말했듯이, gcd 함수와는 달리 lcm 함수는 3.9 버전에서 처음 업데이트되었습니다.

이 글을 포스팅하는 2021.06.27에는 코딩 테스트 같은 시험에서

lcm 함수가 제대로 반영되어 있는지 모르겠습니다.

백준에서는 lcm 함수를 사용해도 괜찮았습니다.

 

lcm 함수를 사용할 수 있다면 최소공배수를 구하는 문제는 매우 쉽게 풀 수 있겠지만,

lcm 함수를 사용 못하는 환경인 경우도 생각해 

유클리드 호제법을 직접 구현하여 최소공배수를 구하는 방법도 까먹으면 안 될 것입니다.

 

 

 

2-3. 공식 문서

밑의 링크는 파이썬 math 모듈에 대한 파이썬 공식 문서 페이지입니다.

gcd 함수와 마찬가지로 여기서 lcm 함수에 대한 공식 문서 내용을 찾을 수 있습니다.

 

math — 수학 함수 — Python 3.9.5 문서

math — 수학 함수 이 모듈은 C 표준에서 정의된 수학 함수에 대한 액세스를 제공합니다. 이 함수는 복소수와 함께 사용할 수 없습니다; 복소수를 지원해야 하면 cmath 모듈에 있는 같은 이름의 함

docs.python.org

 

파이썬 공식 문서의 내용을 보면 gcd 함수와는 달리 3.9 버전에 추가되었다고 합니다.

 

 

 

 

 

 

 

 

2-4. 실행 결과

2-4-1. 매개변수의 개수가 다른 경우

2-4-1-1. 매개변수에 아무것도 넣지 않은 경우

lcm 함수의 매개변수에 아무것도 넣지 않으면 1을 반환합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 아무것도 넣지 않은 경우:", lcm())

lcm 함수의 매개변수에 아무것도 넣지 않은 경우

 

2-4-1-2. 매개변수가 1개일 때

lcm 함수의 매개변수가 1개라면, gcd 함수와 마찬가지로 그 숫자 그대로 반환합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 1 하나만 넣은 경우:", lcm(1))
print("매개변수에 2 하나만 넣은 경우:", lcm(2))
print("매개변수에 100 하나만 넣은 경우:", lcm(100))
print("매개변수에 98765 하나만 넣은 경우:", lcm(98765))

lcm 함수에 매개변수를 1개 넣은 경우

 

2-4-1-3. 매개변수가 2개일 때

lcm 함수의 매개변수가 2개라면, 매개변수에 넣은 두 숫자의 최소공배수를 반환합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 1, 2로 2개를 넣은 경우:", lcm(1, 2))
print("매개변수에 8, 4로 2개를 넣은 경우:", lcm(8, 4))
print("매개변수에 9, 6으로 2개를 넣은 경우:", lcm(9, 6))
print("매개변수에 13, 7로 2개를 넣은 경우:", lcm(13, 7))
print("매개변수에 98765, 432로 2개를 넣은 경우:", lcm(98765, 432))

lcm 함수에 매개변수를 2개 넣은 경우

 

2-4-1-4. 매개변수가 3개 이상일 때

lcm 함수의 매개변수가 3개 이상일 때, 매개변수를 2개 넣은 것처럼

매개변수에 넣은 숫자들의 최소공배수를 반환합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 1, 2, 3으로 3개를 넣은 경우:", lcm(1, 2, 3))
print("매개변수에 8, 4, 16으로 3개를 넣은 경우:", lcm(8, 4, 16))
print("매개변수에 9, 6, 54, 108로 4개를 넣은 경우:", lcm(9, 6, 54, 108))
print("매개변수에 13, 7, 9, 5, 17로 5개를 넣은 경우:", lcm(13, 7, 9, 5, 17))

lcm 함수에 매개변수를 3, 4, 5개 넣은 경우

 

 

 

 

 

 

 

 

2-4-2. 매개변수에 여러 형태의 숫자, 자료형을 넣은 경우

2-4-2-1. 매개변수에 0을 넣은 경우

lcm 함수의 매개변수에 0을 넣으면

0 하나만 있는 경우, 0과 다른 숫자들이 있는 경우 상관없이 0을 반환합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 0으로 1개를 넣은 경우:", lcm(0))
print("매개변수에 0, 1로 2개를 넣은 경우:", lcm(0, 1))
print("매개변수에 0, 2, 4로 3개를 넣은 경우:", lcm(0, 2, 4))
print("매개변수에 0, 4, 8, 16으로 4개를 넣은 경우:", lcm(0, 4, 8, 16))

lcm 함수의 매개변수에 0을 넣은 경우

 

2-4-2-2. 매개변수에 음수인 정수를 넣은 경우

lcm 함수의 매개변수에 음수인 정수를 넣으면 gcd 함수와 마찬가지로 그 음수인 정수들을 모두 양수로 판단하고

매개변수에 넣은 숫자들의 최소공배수를 반환합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 -1로 1개를 넣은 경우:", lcm(-1))
print("매개변수에 -2, -4로 2개를 넣은 경우:", lcm(-2, -4))
print("매개변수에 2, -4, 8로 3개를 넣은 경우:", lcm(2, -4, 8))
print("매개변수에 -4, 8, -16, 32로 4개를 넣은 경우:", lcm(-4, 8, -16, 32))

lcm 함수의 매개변수에 음수인 정수를 넣은 경우

 

2-4-2-3. 매개변수에 실수를 넣은 경우

lcm 함수의 매개변수에 실수를 넣으면 gcd 함수와 마찬가지로

실수는 정수로 해석될 수 없다TypeError 오류가 발생합니다.

밑의 예제처럼 3, 6과 실제로는 같은 값 3.0, 6.0인 float 자료형을 넣는다고 하더라도 TypeError 오류가 발생합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 3.0, 6.0으로 2개를 넣은 경우:", lcm(3.0, 6.0))

lcm 함수의 매개변수에 실수를 넣은 경우

 

2-4-2-4. 매개변수에 숫자 외의 자료형을 넣은 경우

혹시나 정수들의 리스트를 lcm 함수의 매개변수에 넣으면 최소공배수가 반환될까 생각할 수도 있습니다.

하지만, gcd 함수와 마찬가지로 lcm 함수의 매개변수에는 int형인 숫자만 들어올 수 있습니다.

밑의 예제와 같이 리스트를 매개변수에 넣으면 리스트는 정수로 해석될 수 없다TypeError 오류가 발생합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 [3, 9]로 리스트를 넣은 경우:", lcm([3, 9]))

lcm 함수의 매개변수에 리스트를 넣은 경우

 

튜플도 마찬가지로 튜플은 정수로 해석될 수 없다는 TypeError 오류가 발생합니다.

# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm

print("매개변수에 (3, 9)로 튜플을 넣은 경우:", lcm((3, 9)))

lcm 함수의 매개변수에 튜플을 넣은 경우

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

반응형

댓글