lcm — std::lcm
lcm — std::lcm (최소공배수)
std::lcm은 두 정수 m과 n의 **최소공배수(least common multiple)**를 계산해요. C++17에서 도입됐어요.
<numeric> 헤더에 있어요.
출처: cppreference
본문
// <numeric> 헤더, C++17
template< class M, class N >
constexpr std::common_type_t<M, N> lcm( M m, N n );
m과 n의 최소공배수를 계산해요.
만약 M 또는 N이 정수 타입이 아니거나, (cv 한정) bool이면 프로그램은 잘못된 형태(ill-formed)예요.
|m|, |n|, 또는 그 최소공배수가 common_type_t<M, N>으로 표현할 수 없으면 동작이 정의되지 않아요.
#include <numeric>
#include <iostream>
std::lcm(4, 6); // 12
std::lcm(5, 7); // 35 (서로소)
std::lcm(0, 5); // 0 (어떤 수와 0의 lcm은 0)
std::lcm(-4, 6); // 12 (항상 음이 아닌 결과)
특징
- constexpr — 컴파일 타임 사용 가능.
- 결과는 항상 음이 아닌 정수예요.
- 서로 다른 정수 타입을 받아
std::common_type_t로 통일. lcm(m, n) = |m*n| / gcd(m, n)관계를 활용.
// constexpr
constexpr auto v = std::lcm(6, 8); // 24
// 분모 통분
long long common = std::lcm(den1, den2);
분수 연산, 주기 계산, 수 이론 문제 등에서 gcd와 함께 널리 쓰여요.