# std::gcd

< cpp‎ | numeric

定义于头文件 `<numeric>` |  |
template< class M, class N> constexpr std::common_type_t<M, N> gcd(M m, N n); |  | (C++17 起)

计算整数 `m` 与 `n` 的最大公约数。

### 参数

m, n | - | 整数值

### 返回值

若 `m` 与 `n` 均为零则返回零。否则返回 `|m|` 与 `|n|` 的最大公约数。

### 注意

若 `M` 或 `N` 不是整数类型，或者若其中之一是（可有 cv 限定的） bool ，则程序为病式。

若 `|m|` 或 `|n|` 不能表示为 std::common_type_t<M, N> 类型的值，则行为未定义。

### 异常

不抛异常。

### 示例

    #include <numeric>
    int main() {
        constexpr int p {2 * 2 * 3};
        constexpr int q {2 * 3 * 3};
        static_assert(2 * 3 == std::gcd(p, q));
    }

### 参阅

lcm (C++17) | 返回二个整数最小公倍数的 `constexpr` 函数模板 (函数模板)