Related Articles
Find the number of primitive roots modulo prime
• Last Updated : 28 Dec, 2018

Given a prime . The task is to count all the primitive roots of .

A primitive root is an integer x (1 <= x < p) such that none of the integers x – 1, x2 – 1, …., xp – 2 – 1 are divisible by but xp – 1 – 1 is divisible by .

Examples:

Input: P = 3
Output: 1
The only primitive root modulo 3 is 2.

Input: P = 5
Output: 2
Primitive roots modulo 5 are 2 and 3.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: There is always at least one primitive root for all primes. So, using Eulers totient function we can say that f(p-1) is the required answer where f(n) is euler totient function.

Below is the implementation of the above approach:

## C++

 `// CPP program to find the number of``// primitive roots modulo prime``#include ``using` `namespace` `std;`` ` `// Function to return the count of``// primitive roots modulo p``int` `countPrimitiveRoots(``int` `p)``{``    ``int` `result = 1;``    ``for` `(``int` `i = 2; i < p; i++)``        ``if` `(__gcd(i, p) == 1)``            ``result++;`` ` `    ``return` `result;``}`` ` `// Driver code``int` `main()``{``    ``int` `p = 5;`` ` `    ``cout << countPrimitiveRoots(p - 1);`` ` `    ``return` `0;``}`

## Java

 `// Java program to find the number of``// primitive roots modulo prime`` ` `import` `java.io.*;`` ` `class` `GFG {`` ``// Recursive function to return gcd of a and b ``    ``static` `int` `__gcd(``int` `a, ``int` `b) ``    ``{ ``        ``// Everything divides 0  ``        ``if` `(a == ``0``) ``          ``return` `b; ``        ``if` `(b == ``0``) ``          ``return` `a; ``        ` `        ``// base case ``        ``if` `(a == b) ``            ``return` `a; ``        ` `        ``// a is greater ``        ``if` `(a > b) ``            ``return` `__gcd(a-b, b); ``        ``return` `__gcd(a, b-a); ``    ``} `` ` `// Function to return the count of``// primitive roots modulo p``static` `int` `countPrimitiveRoots(``int` `p)``{``    ``int` `result = ``1``;``    ``for` `(``int` `i = ``2``; i < p; i++)``        ``if` `(__gcd(i, p) == ``1``)``            ``result++;`` ` `    ``return` `result;``}`` ` `// Driver code``    ``public` `static` `void` `main (String[] args) {``            ``int` `p = ``5``;`` ` `    ``System.out.println( countPrimitiveRoots(p - ``1``));``    ``}``}``// This code is contributed by anuj_67..`

## Python3

 `# Python 3 program to find the number ``# of primitive roots modulo prime``from` `math ``import` `gcd`` ` `# Function to return the count of``# primitive roots modulo p``def` `countPrimitiveRoots(p):``    ``result ``=` `1``    ``for` `i ``in` `range``(``2``, p, ``1``):``        ``if` `(gcd(i, p) ``=``=` `1``):``            ``result ``+``=` `1`` ` `    ``return` `result`` ` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``p ``=` `5`` ` `    ``print``(countPrimitiveRoots(p ``-` `1``))`` ` `# This code is contributed by``# Surendra_Gangwar`

## C#

 `// C# program to find the number of ``// primitive roots modulo prime ``   ` `using` `System;``   ` `class` `GFG { `` ``// Recursive function to return gcd of a and b  ``    ``static` `int` `__gcd(``int` `a, ``int` `b)  ``    ``{  ``        ``// Everything divides 0   ``        ``if` `(a == 0)  ``          ``return` `b;  ``        ``if` `(b == 0)  ``          ``return` `a;  ``          ` `        ``// base case  ``        ``if` `(a == b)  ``            ``return` `a;  ``          ` `        ``// a is greater  ``        ``if` `(a > b)  ``            ``return` `__gcd(a-b, b);  ``        ``return` `__gcd(a, b-a);  ``    ``}  ``   ` `// Function to return the count of ``// primitive roots modulo p ``static` `int` `countPrimitiveRoots(``int` `p) ``{ ``    ``int` `result = 1; ``    ``for` `(``int` `i = 2; i < p; i++) ``        ``if` `(__gcd(i, p) == 1) ``            ``result++; ``   ` `    ``return` `result; ``} ``   ` `// Driver code ``     ``static` `public` `void` `Main (String []args) { ``            ``int` `p = 5; ``   ` `    ``Console.WriteLine( countPrimitiveRoots(p - 1)); ``    ``} ``} ``// This code is contributed by Arnab Kundu`

## PHP

 ` ``\$b``) ``        ``return` `__gcd(``\$a` `- ``\$b``, ``\$b``); ``    ``return` `__gcd(``\$a``, ``\$b` `- ``\$a``); ``} `` ` `// Function to return the count of``// primitive roots modulo p``function` `countPrimitiveRoots(``\$p``)``{``    ``\$result` `= 1;``    ``for` `(``\$i` `= 2; ``\$i` `< ``\$p``; ``\$i``++)``        ``if` `(__gcd(``\$i``, ``\$p``) == 1)``            ``\$result``++;`` ` `    ``return` `\$result``;``}`` ` `// Driver code``\$p` `= 5;`` ` `echo` `countPrimitiveRoots(``\$p` `- 1);`` ` `// This code is contributed by anuj_67``?>`
Output:
```2
```

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up