C++ Program to Implement Euler Theorem



Euler's theorem states that if two numbers (a and n), are co-prime i.e. gcd(a, n)=1, then 'a' raised to the power of Euler's totient function of n (a^φ(n)) is congruent to 1 modulo n i.e. a^φ(n) ≡ 1 (mod n). The Euler's Totient Function is denoted as φ(n) and represents the count of integers from 1 to n that are relatively co-prime to n.

In this article, we have two co-prime integers. Our task is to implement the Euler Theorem in C++ using given co-prime numbers. Here is an example to verify the Euler Theorem for two co-prime numbers:

Input:
a = 5, n = 21

Output:
Euler's Theorem: 5^12 ≡ 1 (mod 21)

Here is the explanation of the above example:

a = 5, n = 21, gcd(5, 21) = 1
φ(21) = 21(1-1/3)(1-1/7) = 12 [Using Totient Function Formula]

5^12 mod 21 = 1
a^φ(n) ≡ 1 (mod n)
=> 5^12 ≡ 1 (mod 21)

Steps to Implement Euler Theorem

The steps to implement Euler's theorem are as follows:

  • The gcd() function accepts two integers (a and n) as arguments and calculates the gcd of both integers.
  • Then we have defined a phi() function that calculates Euler's Totient function φ(n) to count the number of integers that are co-prime with n. The outer for loop finds the prime factors of n.
  • The inner while loop removes all the prime factors of the n. The result variable gives the number of integers that are co-prime with n by removing the prime factors of n.
  • The powerMod() function computes (base^exp) % mod.
  • In the main() function, we have used the if statement to check if both the integers are co-prime using the gcd() function. If not co-prime, then returns the message "Euler theorem not applicable".

C++ Program to Implement Euler Theorem

The following code implements Euler theorem in C++ using the steps mentioned above:

Open Compiler
#include <iostream> using namespace std; // Function to compute GCD int gcd(int a, int b) { while (b != 0) { int rem = a % b; a = b; b = rem; } return a; } // Function to compute Euler's Totient Function phi-n int phi(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; } // Fast modular exponentiation: (base^exp) % mod int powerMod(int base, int exp, int mod) { int result = 1; base %= mod; while (exp > 0) { if (exp % 2 == 1) result = (1LL * result * base) % mod; base = (1LL * base * base) % mod; exp /= 2; } return result; } int main() { int a = 5; int n = 21; if (gcd(a, n) != 1) { cout << "Euler's Theorem not applicable: a and n must be co-prime." << endl; return 0; } int phi_n = phi(n); int result = powerMod(a, phi_n, n); cout << "a = " << a << ", n = " << n << ", phi-n = " << phi_n << endl; cout << "Euler's Theorem: " << a << "^" << phi_n << " ? " << result << " (mod " << n << ")" << endl; return 0; }

The output of the above code is:

a = 5, n = 21, phi-n = 12
Euler's Theorem: 5^12 ≡ 1 (mod 21)
Updated on: 2025-04-23T17:13:22+05:30

773 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements