numeric_lcm
numeric_lcm (최소공배수)
std::lcm은 정수 m과 n의 최소공배수를 계산하는 함수예요. C++17부터 사용할 수 있어요.
출처: cppreference
본문
<numeric> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template< class M, class N >
constexpr std::common_type_t<M, N> lcm( M m, N n );
(since C++17)
정수 m과 n의 최소공배수를 계산해요.
M 또는 N이 정수 타입이 아니거나, 둘 중 하나가 (cv 한정된) bool이면 프로그램은 ill-formed예요.
|m|, |n| 또는 |m|과 |n|의 최소공배수를 std::common_type_t<M, N> 타입의 값으로 표현할 수 없으면 동작은 정의되지 않아요.
매개변수 (Parameters)
- m, n — 정수 값
반환값 (Return value)
m 또는 n이 0이면 0을 반환해요. 그 외에는 |m|과 |n|의 최소공배수를 반환해요.
예외 (Exceptions)
예외를 던지지 않아요.
참고 (Notes)
| 피처 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_gcd_lcm |
201606L | (C++17) | std::gcd, std::lcm |
예제 (Example)
이 코드를 실행해 봐요.
#include <iostream>
#include <numeric>
#define OUT(...) std::cout << #__VA_ARGS__ << " = " << __VA_ARGS__ << '\n'
constexpr auto lcm(auto x, auto... xs)
{
return ((x = std::lcm(x, xs)), ...);
}
int main()
{
constexpr int p{2 * 2 * 3};
constexpr int q{2 * 3 * 3};
static_assert(2 * 2 * 3 * 3 == std::lcm(p, q));
static_assert(225 == std::lcm(45, 75));
static_assert(std::lcm( 6, 10) == 30);
static_assert(std::lcm( 6, -10) == 30);
static_assert(std::lcm(-6, -10) == 30);
static_assert(std::lcm( 24, 0) == 0);
static_assert(std::lcm(-24, 0) == 0);
OUT(lcm(2 * 3, 3 * 4, 4 * 5));
OUT(lcm(2 * 3 * 4, 3 * 4 * 5, 4 * 5 * 6));
OUT(lcm(2 * 3 * 4, 3 * 4 * 5, 4 * 5 * 6, 5 * 6 * 7));
}
출력:
lcm(2 * 3, 3 * 4, 4 * 5) = 60
lcm(2 * 3 * 4, 3 * 4 * 5, 4 * 5 * 6) = 120
lcm(2 * 3 * 4, 3 * 4 * 5, 4 * 5 * 6, 5 * 6 * 7) = 840