Tim Varley Logo
Tim Varley Principal AI Engineer and Tech Leader
Problem #69 easy

Totient Maximum

Euler's totient function, φ(n) [sometimes called the phi function], is defined as the number of positive integers not exceeding n which are relatively prime to n. For example, as 1, 2, 4, 5, 7, and 8, are all less than or equal to nine and relatively prime to nine, φ(9)=6.

| n | Relatively Prime | φ(n) | n/φ(n) | |---|------------------|------|--------| | 2 | 1 | 1 | 2 | | 3 | 1,2 | 2 | 1.5 | | 4 | 1,3 | 2 | 2 | | 5 | 1,2,3,4 | 4 | 1.25 | | 6 | 1,5 | 2 | 3 | | 7 | 1,2,3,4,5,6 | 6 | 1.1666... | | 8 | 1,3,5,7 | 4 | 2 | | 9 | 1,2,4,5,7,8 | 6 | 1.5 | | 10 | 1,3,7,9 | 4 | 2.5 |

It can be seen that n = 6 produces a maximum n/φ(n) for n ≤ 10.

Find the value of n ≤ 1,000,000 for which n/φ(n) is a maximum.

View on Project Euler

Implementations

cpp
#include <iostream>
int totient_maximum()
{
// The maximum n/phi(n) occurs for n that is product of first k primes where the product <= 1e6
// Primes: 2,3,5,7,11,13,17
// 2*3*5*7*11*13*17 = 510510
// Next prime 19: 510510*19 = 9699690 > 1e6
long long product = 1;
int primes[] = {2,3,5,7,11,13,17};
for(int p : primes){
if(product * p > 1000000) break;
product *= p;
}
return product;
}
#if ! defined UNITTEST_MODE
int main(int argc, char const *argv[])
{
std::cout << "Answer: " << totient_maximum() << std::endl;
}
#endif // #if ! defined UNITTEST_MODE
View on GitHub
O(1) time, O(1) space (simple multiplication loop)