# Find the number of primitive roots modulo prime

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
``` My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.