Link Search Menu Expand Document
あるまかんライブラリ

:heavy_check_mark: totient() (オイラーのトーシェント関数)
(Math/Number-Theory/totient-func.hpp)

Verified with

Code

#pragma once

/**
 * @brief totient() (オイラーのトーシェント関数)
 */
template <class Integer>
constexpr Integer totient(Integer n) {
    Integer ret = n;
    for (Integer i = 2; i * i <= n; ++i) {
        if (n % i == 0) {
            ret -= ret / i;
            while (n % i == 0) n /= i;
        }
    }
    if (n != 1) ret -= ret / n;
    return ret;
}
#line 2 "Math/Number-Theory/totient-func.hpp"

/**
 * @brief totient() (オイラーのトーシェント関数)
 */
template <class Integer>
constexpr Integer totient(Integer n) {
    Integer ret = n;
    for (Integer i = 2; i * i <= n; ++i) {
        if (n % i == 0) {
            ret -= ret / i;
            while (n % i == 0) n /= i;
        }
    }
    if (n != 1) ret -= ret / n;
    return ret;
}
Back to top page