Euler's criterion (Check if square root under modulo p exists) (original) (raw)

Last Updated : 23 Jul, 2025

Given a number 'n' and a prime p, find if square root of n under modulo p exists or not. A number x is square root of n under modulo p if (x*x)%p = n%p.

Examples :

Input: n = 2, p = 5 Output: false There doesn't exist a number x such that (x*x)%5 is 2

Input: n = 2, p = 7 Output: true There exists a number x such that (x*x)%7 is 2. The number is 3.

A Naive Method is to try every number x where x varies from 2 to p-1. For every x, check if (x * x) % p is equal to n % p.

C++ `

// A Simple C++ program to check if square root of a number // under modulo p exists or not #include using namespace std;

// Returns true if square root of n under modulo p exists bool squareRootExists(int n, int p) { n = n%p;

// One by one check all numbers from 2 to p-1
for (int x=2; x<p; x++)
    if ((x*x)%p == n)
        return true;
return false;

}

// Driver program to test int main() { int p = 7; int n = 2; squareRootExists(n, p)? cout << "Yes": cout << "No"; return 0; }

Java

// A Simple Java program to check if square // root of a number under modulo p exists or not import java.util.*; class GFG {

// Returns true if square root of n under 
// modulo p exists
static boolean squareRootExists(int n, int p)
{
    n = n % p;

    // One by one check all numbers from 2 
    // to p-1
    for (int x = 2; x < p; x++)
        if ((x * x) % p == n)
            return true;
            
    return false;
}

// Driver program to test
public static void main (String[] args) 
{
    
    int p = 7;
    int n = 2;
    
    if(squareRootExists(n, p))
        System.out.print("Yes");
    else
        System.out.print("No");  
}

}

// This code is contributed by Anant Agarwal.

Python3

A Simple Python 3 program to

check if square root of a number

under modulo p exists or not

Returns true if square root of

n under modulo p exists

def squareRootExists(n, p): n = n % p

# One by one check all numbers 
# from 2 to p-1
for x in range(2, p, 1):
    if ((x * x) % p == n):
        return True
return False

Driver Code

if name == 'main': p = 7 n = 2 if(squareRootExists(n, p) == True): print("Yes") else: print("No")

This code is contributed by

Surendra_Gangwar

C#

// A Simple C# program to check // if square root of a number // under modulo p exists or not using System;

class GFG {

// Returns true if square root of  
// n under modulo p exists
static bool squareRootExists(int n,
                             int p)
{
    n = n % p;

    // One by one check all numbers
    // from 2 to p-1 
    for (int x = 2; x < p; x++)
        if ((x * x) % p == n)
            return true;
            
    return false;
}

// Driver code
public static void Main () 
{
    
    int p = 7;
    int n = 2;
    
    if(squareRootExists(n, p))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No"); 
}

}

// This code is contributed by Sam007.

PHP

n=n = n=n % $p; // One by one check all // numbers from 2 to p-1 for ($x = 2; x<x < x<p; $x++) if (($x * x)x) % x)p == $n) return true; return false; } // Driver Code $p = 7; $n = 2; if(squareRootExists($n, $p) == true) echo "Yes"; else echo "No"; // This code is contributed by ajit ?>

JavaScript

`

Output :

Yes

Time Complexity of this method is O(p).
Space Complexity: O(1) since only constant variables being used

This problem has a direct solution based on Euler's Criterion.
Euler's criterion states that

Square root of n under modulo p exists if and only if n(p-1)/2 % p = 1

Here square root of n exists means is, there exist an integer x such that (x * x) % p = 1

Below is implementation based on above criterion. Refer Modular Exponentiation for power function.

C++ `

// C++ program to check if square root of a number // under modulo p exists or not #include using namespace std;

// Utility function to do modular exponentiation. // It returns (x^y) % p. int power(int x, int y, int p) { int res = 1; // Initialize result x = x % p; // Update x if it is more than or // equal to p

while (y > 0)
{
    // If y is odd, multiply x with result
    if (y & 1)
        res = (res*x) % p;

    // y must be even now
    y = y>>1; // y = y/2
    x = (x*x) % p;
}
return res;

}

// Returns true if there exists an integer x such // that (x*x)%p = n%p bool squareRootExists(int n, int p) { // Check for Euler's criterion that is // [n ^ ((p-1)/2)] % p is 1 or not. if (power(n, (p-1)/2, p) == 1) return true;

return false;

}

// Driver program to test int main() { int p = 7; int n = 2; squareRootExists(n, p)? cout << "Yes": cout << "No"; return 0; }

Java

// Java program to check if // square root of a number // under modulo p exists or not import java.io.*;

class GFG {

// Utility function to do // modular exponentiation. // It returns (x^y) % p. static int power(int x, int y, int p) { int res = 1; // Initialize result x = x % p; // Update x if it is more // than or equal to p

while (y > 0)
{
    // If y is odd, multiply
    // x with result
    if ((y & 1) == 0)
        res = (res * x) % p;

    // y must be even now
    y = y >> 1; // y = y/2
    x = (x * x) % p;
}
return res;

}

// Returns true if there // exists an integer x such // that (x*x)%p = n%p static boolean squareRootExists(int n, int p) { // Check for Euler's criterion // that is [n ^ ((p-1)/2)] % p // is 1 or not. if (power(n, (p - 1) / 2, p) == 1) return true;

return false;

}

// Driver Code public static void main (String[] args) { int p = 7; int n = 2; if(squareRootExists(n, p)) System.out.println ("Yes"); else System.out.println("No"); } }

// This code is contributed by ajit

Python3

Python3 program to check if square root

of a number under modulo p exists or not

Utility function to do modular

exponentiation. It returns (x^y) % p.

def power(x, y, p): res = 1 # Initialize result x = x % p

# Update x if it is more than
# or equal to p
while (y > 0):
    
    # If y is odd, multiply
    # x with result
    if (y & 1):
        res = (res * x) % p
        
    # y must be even now
    y = y >> 1 # y = y/2
    x = (x * x) % p
return res

Returns true if there exists an integer

x such that (x*x)%p = n%p

def squareRootExists(n, p):

# Check for Euler's criterion that is 
# [n ^ ((p-1)/2)] % p is 1 or not.
if (power(n, (int)((p - 1) / 2), p) == 1):
    return True
return False

Driver Code

p = 7 n = 2 if(squareRootExists(n, p) == True): print("Yes") else: print("No")

This code is contributed by Rajput-Ji

C#

// C# program to check if // square root of a number // under modulo p exists or not using System;

class GFG {

// Utility function to do // modular exponentiation. // It returns (x^y) % p. static int power(int x, int y, int p) { int res = 1;// Initialize result x = x % p; // Update x if it is more // than or equal to p

while (y > 0)
{
    // If y is odd, multiply
    // x with result
    if ((y & 1) == 0)
        res = (res * x) % p;

    // y must be even now
    y = y >> 1; // y = y/2
    x = (x * x) % p;
}
return res;

}

// Returns true if there // exists an integer x such // that (x*x)%p = n%p static bool squareRootExists(int n, int p) { // Check for Euler's criterion // that is [n ^ ((p-1)/2)] % p // is 1 or not. if (power(n, (p - 1) / 2, p) == 1) return true;

return false;

}

// Driver Code static public void Main () { int p = 7; int n = 2; if(squareRootExists(n, p)) Console.WriteLine("Yes"); else Console.WriteLine("No"); } }

// This code is contributed by m_kit

PHP

y,y, y,p) { $res = 1; // Initialize result x=x = x=x % $p; // Update x if it // is more than // or equal to p while ($y > 0) { // If y is odd, multiply // x with result if ($y & 1) res=(res = (res=(res * x)x) % x)p; // y must be even now y=y = y=y >> 1; // y = y/2 x=(x = (x=(x * x)x) % x)p; } return $res; } // Returns true if there // exists an integer x such // that (x*x)%p = n%p function squareRootExists($n, $p) { // Check for Euler's criterion // that is [n ^ ((p-1)/2)] % p // is 1 or not. if (power($n, (int)(($p - 1) / 2), $p) == 1) return true; return false; } // Driver Code $p = 7; $n = 2; if(squareRootExists($n, $p) == true) echo "Yes"; else echo "No"; // This code is contributed by ajit ?>

JavaScript

`

Output :

Yes

How does this work?

If p is a prime, then it must be an odd number and (p-1) must be an even, i.e., (p-1)/2 must be an integer.

Suppose a square root of n under modulo p exists, then there must exist an integer x such that, x2 % p = n % p or, x2 ? n mod p

Raising both sides to power (p-1)/2, (x2)(p-1)/2 ? n(p-1)/2 mod p
xp-1 ? n(p-1)/2 mod p

Since p is a prime, from Fermat's theorem, we can say that xp-1 ? 1 mod p

Therefore, n(p-1)/2 ? 1 mod p

Time Complexity: O(logp)
Auxiliary Space: O(1)
You may like to see below:
Find Square Root under Modulo p | Set 1 (When p is in form of 4*i + 3)