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