2021.06.17 - [프로그래밍/Python] - [Python] gcd 함수 : 최대공약수
앞서 최대공약수를 구하는 함수인 gcd 함수에 대해서 포스팅했습니다.
이어서 최소공배수를 반환하는 함수인 lcm 함수에 대해서 포스팅해보겠습니다.
1. 최소공배수
배수는 어떤 정수가 있을 때, 그 정수에 같거나 다른 정수를 곱한 수입니다.
공배수는 어떤 정수들이 있을 때, 그 정수들의 공통인 배수들을 말합니다.
최소공배수는 공배수들 중에서 가장 작은 공배수입니다.
영어로는 Least Common Multiple 혹은 Lowest Common Multiple라고 하며
이를 약자로 줄여서 LCM이라고 합니다.
gcd 함수와 마찬가지로 lcm 함수도 이 영어의 약자를 따와서 만든 것 같습니다.
밑의 링크는 배수, 공배수, 최소공배수에 대한 위키백과 링크입니다.
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))
- lcm('정수1', '정수2', '정수3', ... , '정수n')
# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm
print("lcm 함수 사용:", lcm(10, 100))
코드를 실행시키면 매개변수에 넣은 숫자들의 최소공배수를 반환합니다.
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 함수에 대한 공식 문서 내용을 찾을 수 있습니다.
파이썬 공식 문서의 내용을 보면 gcd 함수와는 달리 3.9 버전에 추가되었다고 합니다.
2-4. 실행 결과
2-4-1. 매개변수의 개수가 다른 경우
2-4-1-1. 매개변수에 아무것도 넣지 않은 경우
lcm 함수의 매개변수에 아무것도 넣지 않으면 1을 반환합니다.
# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm
print("매개변수에 아무것도 넣지 않은 경우:", 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))
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))
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))
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))
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))
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))
2-4-2-4. 매개변수에 숫자 외의 자료형을 넣은 경우
혹시나 정수들의 리스트를 lcm 함수의 매개변수에 넣으면 최소공배수가 반환될까 생각할 수도 있습니다.
하지만, gcd 함수와 마찬가지로 lcm 함수의 매개변수에는 int형인 숫자만 들어올 수 있습니다.
밑의 예제와 같이 리스트를 매개변수에 넣으면 리스트는 정수로 해석될 수 없다는 TypeError 오류가 발생합니다.
# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm
print("매개변수에 [3, 9]로 리스트를 넣은 경우:", lcm([3, 9]))
튜플도 마찬가지로 튜플은 정수로 해석될 수 없다는 TypeError 오류가 발생합니다.
# lcm 함수를 사용하기 위해 math 모듈을 import합니다.
from math import lcm
print("매개변수에 (3, 9)로 튜플을 넣은 경우:", lcm((3, 9)))
댓글