ja / en
Overview

Euler's totient function

2024/07/29
1 min read

Purpose

Euler’s totient function. For nNn \in \mathbb{N}, it gives φ(n)φ(n), the number of natural numbers up to nn that are coprime to nn.
When the prime factorization of n is expressed as

n=k=1dpkek n = \prod_{k=1}^{d}p_k^{e_k}

,

ϕ(n)=k=1d(pkekpkek1)=nk=1d(11pk) \phi (n) = \prod_{k=1}^{d}\left(p_k^{e_k} - p_k^{e_k-1}\right) = n\prod_{k=1}^{d}\left(1-\frac{1}{p_k}\right)

we calculate using this transformation.

Time Complexity

O(n)O(\sqrt{n})

Usage

int res = euler_phi(n);

Implementation

int euler_phi(int n) {
int ret = n;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
ret -= ret / i;
do
n /= i;
while (n % i == 0);
}
}
return n > 1 ? ret - ret / n : ret;
}