Namespaces
Variants

std:: lcm

From cppreference.net
헤더 파일에 정의됨 <numeric>
template < class M, class N >
constexpr std:: common_type_t < M, N > lcm ( M m, N n ) ;
(C++17부터)

정수 m n 최소공배수 를 계산합니다.

만약 M 또는 N 중 하나가 정수형이 아니거나, 둘 중 하나가 (가능하다면 cv 한정자 적용된) bool 인 경우, 프로그램은 형식에 맞지 않습니다.

| m | , | n | , 또는 | m | | n | 의 최소공배수가 std:: common_type_t < M, N > 타입의 값으로 표현 불가능한 경우, 이 동작은 정의되지 않습니다.

목차

매개변수

m, n - 정수 값

반환값

만약 m 또는 n 중 하나가 0이면, 0을 반환합니다. 그렇지 않으면, | m | | n | 의 최소공배수를 반환합니다.

예외

예외를 던지지 않습니다.

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_gcd_lcm 201606L (C++17) std::gcd , std::lcm

예제

#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

참고 항목

(C++17)
두 정수의 최대공약수를 계산함
(함수 템플릿)