serna37's Library

Logo

C++ アルゴリズムとデータ構造のライブラリ

View the Project on GitHub serna37/library-cpp

:heavy_check_mark: オイラーのφ関数
(library/number/prime/euler_phi.hpp)

オイラーのφ関数

できること

計算量

$O(\sqrt{N})$

使い方

long long ans = euler_phi(N);

Required by

Verified with

Code

#pragma once
template <typename T> T euler_phi(T n) {
    T ret = n;
    for (T 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 "library/number/prime/euler_phi.hpp"
template <typename T> T euler_phi(T n) {
    T ret = n;
    for (T 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