lcm — std::lcm

lcm — std::lcm (최소공배수)

std::lcm은 두 정수 mn의 **최소공배수(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 );

mn의 최소공배수를 계산해요.

만약 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와 함께 널리 쓰여요.

더 알아보기 (Learn more)

cppreference