Explain the implementation of Euler's Totient Implementation
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
Introduction
Euler’s totient function phi(n) counts how many integers from 1 to n are coprime with n. Efficient implementations do not test every number individually; instead, they factor n and use the fact that each distinct prime factor removes a predictable fraction of candidates.
The key formula behind the implementation
If the distinct prime factors of n are p1, p2, and so on, then:
phi(n) = n * (1 - 1/p1) * (1 - 1/p2) * ...
That formula is the reason efficient implementations work. You do not need to compute greatest common divisors for every integer up to n. You only need the distinct prime factors.
For example, if n = 12, the distinct prime factors are 2 and 3. Then:
- start with
12 - remove the fraction divisible by
2 - remove the fraction divisible by
3
The result is 4, corresponding to 1, 5, 7, and 11.
Efficient implementation by prime factorization
A standard implementation checks divisors up to the square root of n. Whenever it finds a prime factor, it removes that factor completely and adjusts the result once.
This implementation is efficient because each prime factor affects the result only once, no matter how many times that prime divides n.
Why the loop works
The loop does two jobs:
- find a prime factor
p - divide
nbypuntil that factor is fully removed
The line:
implements the formula step for one distinct prime factor. It removes the numbers that are not coprime because they share that factor.
After the loop finishes, if n > 1, then the remaining n itself is a prime factor larger than the square root of the original number. That last prime still needs to be applied to the result once.
Example walk-through for n = 36
Start with:
- '
n = 36' - '
result = 36'
The first factor found is 2.
- divide out all
2s, sonbecomes9 - update
resultto36 - 18 = 18
The next factor is 3.
- divide out all
3s, sonbecomes1 - update
resultto18 - 6 = 12
Now n is fully factored, so phi(36) = 12.
That matches the count of numbers in the range 1 through 36 that are coprime with 36.
When you need totients for many numbers
If you need phi(n) for one number at a time, the factorization approach above is usually enough. If you need totients for every number up to a limit, a sieve-style algorithm is better.
This uses the same prime-factor idea, but applies it to all multiples of each prime.
Why totient matters
Totient appears in:
- Euler’s theorem
- modular arithmetic
- RSA-style number theory discussions
- counting reduced fractions and coprime pairs
Even when the surrounding application is advanced, the core implementation is still about prime factors and repeated division.
Common Pitfalls
The biggest mistake is updating the result once for every repeated factor instead of once for each distinct prime factor. For example, 12 contains 2 twice, but the totient formula applies the factor 2 only once.
Another issue is forgetting the final if n > 1 step. That causes incorrect answers whenever the remaining unfactored part is a prime larger than the loop’s tested divisors.
Developers also sometimes compute totient by checking gcd(i, n) == 1 for every i. That is fine for demonstrations, but it is too slow compared with the factorization method for larger inputs.
Finally, remember that phi(1) is 1, which can surprise people who expect the count to start at zero.
Summary
- '
phi(n)counts integers from1tonthat are coprime withn.' - Efficient implementations use distinct prime factors, not repeated gcd checks.
- The core update is
result -= result // pfor each distinct prime factorp. - A final leftover prime factor must still be applied after the main loop.
- Use a sieve approach when you need totients for many values, not just one.
Related reading
- Explain this On log n algorithm for the Cat/Egg Throwing Problem
- Explain this snippet which finds the maximum of two integers without using if-else or any other comparison operator?
- Explain using xor to find two non-duplicate integers in an array
- Explain why time complexity for summing digits in a number of length N is OlogN
- Expressing an integer as a series of multipliers
- Extend a line segment a specific distance
- Explaining computational complexity theory
- Explaining the AdaBoost Algorithms to non-technical people

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.