Check if a number is perfect square without finding square root

We need to check whether a number is a perfect square or not without finding its square root. 
Examples: 

Input : n = 36 
Output : Yes
Input : n = 12 
Output : No 

We have discussed a method to check if a number is perfect square.
Method 1:
The idea is to run a loop from i = 1 to floor(sqrt(n)) then check if squaring it makes n. 
 

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to check if a number is perfect
// square without finding square root
#include <bits/stdc++.h>
using namespace std;
 
bool isPerfectSquare(int n)
{
    for (int i = 1; i * i <= n; i++) {
 
        // If (i * i = n)
        if ((n % i == 0) && (n / i == i)) {
            return true;
        }
    }
    return false;
}
 
// Driver code
int main()
{
    long long int n = 36;
    if (isPerfectSquare(n))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to check if a number is perfect
// square without finding the square root
public class GfG {
 
    static boolean isPerfectSquare(int n)
    {
        for (int i = 1; i * i <= n; i++) {
 
            // If (i * i = n)
            if ((n % i == 0) && (n / i == i)) {
                return true;
            }
        }
        return false;
    }
 
    public static void main(String[] args)
    {
 
        int n = 36;
 
        if (isPerfectSquare(n))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by Rituraj Jain

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to check if a number is
# perfect square without finding square root
 
# from math import sqrt function
 
 
def isPerfectSquare(n) :
 
    i = 1
    while(i * i<= n):
         
        # If (i * i = n)
        if ((n % i == 0) and (n / i == i)):
            return True
             
        i = i + 1
    return False
 
# Driver code
if __name__ == "__main__" :
 
    n = 36
    if (isPerfectSquare(n)):
        print("Yes, it is a perfect square.")
    else :
        print("No, it is not a perfect square.")
 
    # This code is contributed by Ryuga

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to check if a number is perfect
// square without finding the square root
using System;
 
public class GfG {
 
    static bool isPerfectSquare(int n)
    {
        for (int i = 1; i * i <= n; i++) {
 
            // If (i * i = n)
            if ((n % i == 0) && (n / i == i)) {
                return true;
            }
        }
        return false;
    }
 
    public static void Main()
    {
 
        int n = 36;
 
        if (isPerfectSquare(n))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
/*This code is contributed by Rajput-Ji*/

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to check if a number is perfect
// square without finding square root
 
function isPerfectSquare($n)
{
    for ($i = 1; $i * $i <= $n; $i++) {
 
        // If (i * i = n)
        if (($n % $i == 0) && ($n / $i == $i)) {
            return true;
        }
    }
    return false;
}
     
// Driver code
$n = 36;
if (isPerfectSquare($n))
    echo "Yes";    
else
    echo "No";
 
// This code is contributed
// by Akanksha Rai

chevron_right


Output: 
 

Yes



Time Complexity : O(sqrt(N))
Method 2:
The idea is to use binary search to find a number in range 1 to n whose square is equal to n, such that at each iteration the problem statement reduces to half [1 to n/2-1 OR n/2 to n].
 



C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program for above approach
#include <bits/stdc++.h>
using namespace std;
 
// Program to find if x is a
// perfect square.
bool isPerfectSquare(int x)
    long long left = 1, right = num;
   
    while (left <= right)
    {
        long long mid = (left + right) / 2;
        
        // Check if mid is perfect square
        if (mid * mid == num)
        {
            return true;
        }
         
        // Mid is small -> go right to increase mid
        if (mid * mid < num)
        {
            left = mid + 1;
        }
       
        // Mid is large -> to left to decrease mid
        else
        {
            right = mid - 1;
        }
    }
    return false;
}
 
// Driver Code
int main()
{
    int x = 2500;
   
    // Function Call
    if (isPerfectSquare(x))
        cout << "Yes";
    else
        cout << "No";
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program for above approach
class GFG
{
     
    // Program to find if x is a
    // perfect square.
    static boolean isPerfectSquare(int num)
    {
        long left = 1, right = num;
         
        while (left <= right)
        {
            long mid = (left + right) / 2;
           
            // Check if mid is perfect square
            if (mid * mid == num)
            {
                return true;
            }
            
            // Mid is small -> go right to increase mid
            if (mid * mid < num)
            {
                left = mid + 1;
            }
           
            // Mid is large -> to left to decrease mid
            else
            {
                right = mid - 1;
            }
        }
        return false;
    }
     
    // Driver code
    public static void main(String[] args)
    {
        int x = 2500;
         
        // Function Call
        if (isPerfectSquare(x))
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python program for above approach
 
# Program to find if x is a
# perfect square.
def isPerfectSquare(x):
 
    left = 1, right = num;
     
    while (left <= right):
       
        mid = (left + right) / 2;
         
        # Check if mid is perfect square
        if (mid * mid == num)
            return true;
         
        # Mid is small -> go right to increase mid
        if (mid * mid < num)
            left = mid + 1;
           
        # Mid is large -> to left to decrease mid
        else
            right = mid - 1;
    return false;
 
# Driver code
if __name__ == "__main__":
   
  x = 2500
   
  # Function Call
  if (isPerfectSquare(x)):
      print("Yes")
  else:
      print("No")

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program for above approach
using System;
class GFG{
     
// Program to find if x is a
// perfect square.
static bool isPerfectSquare(int num)
{
  long left = 1, right = num;
 
  while (left <= right)
  {
    long mid = (left + right) / 2;
 
    // Check if mid is perfect
    // square
    if (mid * mid == num)
    {
      return true;
    }
 
    // Mid is small -> go right to
    // increase mid
    if (mid * mid < num)
    {
      left = mid + 1;
    }
 
    // Mid is large -> to left
    // to decrease mid
    else
    {
      right = mid - 1;
    }
  }
  return false;
}
      
// Driver code
public static void Main(string[] args)
{
  int x = 2500;
 
  // Function Call
  if (isPerfectSquare(x))
    Console.Write("Yes");
  else
    Console.Write("No");
}
}
 
// This code is contributed by Rutvik_56

chevron_right


Output: 
 

Yes



Time Complexity : O(log(N))
 

competitive-programming-img




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.