diff --git a/math/eulers_totient_function.cpp b/math/eulers_totient_function.cpp new file mode 100644 index 000000000..31ced5a51 --- /dev/null +++ b/math/eulers_totient_function.cpp @@ -0,0 +1,41 @@ +/// C++ Program to find Euler Totient Function +#include + +/* + * Euler Totient Function is also known as phi function. + * phi(n) = phi(p1^a1).phi(p2^a2)... + * where p1, p2,... are prime factors of n. + * 3 Euler's properties: + * 1. phi(prime_no) = prime_no-1 + * 2. phi(prime_no^k) = (prime_no^k - prime_no^(k-1)) + * 3. phi(a,b) = phi(a). phi(b) where a and b are relative primes. + * Applying this 3 properties on the first equation. + * phi(n) = n. (1-1/p1). (1-1/p2). ... + * where p1,p2... are prime factors. + * Hence Implementation in O(sqrt(n)). + * phi(100) = 40 + * phi(1) = 1 + * phi(17501) = 15120 + * phi(1420) = 560 + */ + +// Function to caculate Euler's totient phi +int phiFunction(int n) { + int result = n; + for (int i = 2; i * i <= n; i++) { + if (n % i == 0) { + while (n % i == 0) { + n /= i; + } + result -= result / i; + } + } + if (n > 1) result -= result / n; + return result; +} + +int main() { + int n; + std::cin >> n; + std::cout << phiFunction(n); +}