Open In App
Related Articles

Check if a number is perfect square without finding square root

Improve Article
Improve
Save Article
Save
Like Article
Like

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 

Recommended Practice

Method 1:
The idea is to run a loop from i = 1 to floor(sqrt(n)) and then check if squaring it makes n. 

Below is the implementation:

C++




// 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 (n == 0 || isPerfectSquare(n))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}


Java




// 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 (n == 0 || isPerfectSquare(n))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by Rituraj Jain


Python3




# 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.")
    elif n == 0:
        print("Yes, it is a perfect square.")
    else :
        print("No, it is not a perfect square.")
 
    # This code is contributed by Ryuga


C#




// 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 (n == 0 || isPerfectSquare(n))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
/*This code is contributed by Rajput-Ji*/


PHP




<?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 ($n == 0 || isPerfectSquare($n))
    echo "Yes";    
else
    echo "No";
 
// This code is contributed
// by Akanksha Rai


Javascript




<script>
// JavaScript program to check if a number is perfect
// square without finding square root
 
function isPerfectSquare(n)
{
    for (let i = 1; i * i <= n; i++) {
 
        // If (i * i = n)
        if ((n % i == 0) && (Math.floor(n / i) == i)) {
            return true;
        }
    }
    return false;
}
 
// Driver code
 
    let n = 36;
    if (n == 0 || isPerfectSquare(n))
        document.write("Yes");
    else
        document.write("No");
 
 
 
 
// This code is contributed by Surbhi Tyagi.
</script>


Output

Yes

Time Complexity : O(sqrt(N))
Auxiliary Space: O(1)

Method 2:
The idea is to use binary search to find a number in the 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].

Below is the implementation:

C++




// C++ 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 = x;
 
    while (left <= right) {
        long long mid = (left + right) / 2;
 
        // Check if mid is perfect square
        if (mid * mid == x) {
            return true;
        }
 
        // Mid is small -> go right to increase mid
        if (mid * mid < x) {
            left = mid + 1;
        }
 
        // Mid is large -> to left to decrease mid
        else {
            right = mid - 1;
        }
    }
    return false;
}
 
// Driver Code
int main()
{
    int n = 2500;
 
    // Function Call
    if (n == 0 || isPerfectSquare(n))
        cout << "Yes";
    else
        cout << "No";
    return 0;
}


Java




// 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 (x == 0 || isPerfectSquare(x))
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}


Python3




# Python program for above approach
 
# Program to find if x is a
# perfect square.
def isPerfectSquare(x):
     
    left = 1
    right = x
     
    while (left <= right):
       
        mid = (left + right) >> 1
         
        # Check if mid is perfect square
        if ((mid * mid) == x):
            return True
         
        # Mid is small -> go right to increase mid
        if (mid * mid < x):
            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 x == 0:
        print("Yes, it is a perfect square.")
  elif (isPerfectSquare(x)):
      print("Yes")
  else:
      print("No")


C#




// C# program for above approach
using System;
class GFG{
     
// Program to find if x is a
// perfect square.
static bool isPerfectSquare(int x)
{
  long left = 1, right = x;
 
  while (left <= right)
  {
    long mid = (left + right) / 2;
 
    // Check if mid is perfect
    // square
    if (mid * mid == x)
    {
      return true;
    }
 
    // Mid is small -> go right to
    // increase mid
    if (mid * mid < x)
    {
      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 n = 2500;
 
  // Function Call
  if (n == 0 || isPerfectSquare(n))
    Console.Write("Yes");
  else
    Console.Write("No");
}
}
 
// This code is contributed by Rutvik_56n == 0 ||


Javascript




<script>
 
// Javascript program for above approach
 
// Program to find if x is a
// perfect square.
function isPerfectSquare(x)
    let left = 1, right = x;
   
    while (left <= right)
    {
        let mid = parseInt((left + right) / 2);
        
        // Check if mid is perfect square
        if (mid * mid == x)
        {
            return true;
        }
         
        // Mid is small -> go right to increase mid
        if (mid * mid < x)
        {
            left = mid + 1;
        }
       
        // Mid is large -> to left to decrease mid
        else
        {
            right = mid - 1;
        }
    }
    return false;
}
 
// Driver Code
let x = 2500;
 
// Function Call
if (x == 0 || isPerfectSquare(x))
    document.write("Yes");
else
    document.write("Yes");
     
// This code is contributed by rishavmahato348
 
</script>


Output

Yes

Time Complexity : O(log(N))
Auxiliary Space: O(1) 

Method 3: Using the property that the sum of odd numbers is a perfect square

The given program checks if a number is a perfect square without finding the square root. It does this by iterating over the odd numbers, starting from 1 and subtracting them from the given number n. If n becomes zero, it means that n is a perfect square.

C++




#include <iostream>
using namespace std;
 
bool is_perfect_square(int n) {
    int i = 1;
    while (n > 0) {
        n -= i;
        i += 2;
    }
    return n == 0;
}
 
int main() {
    int n = 36;
    if (is_perfect_square(n)) {
        cout << "Yes" << endl;
    }
    else {
        cout << "No" << endl;
    }
 
    n = 12;
    if (is_perfect_square(n)) {
        cout << "Yes" << endl;
    }
    else {
        cout << "No" << endl;
    }
 
    return 0;
}


Java




// Java program for the above approach
public class GFG {
    public static boolean isPerfectSquare(int n) {
        int i = 1;
        while (n > 0) {
            n -= i;
            i += 2;
        }
        return n == 0;
    }
 
    public static void main(String[] args) {
        int n = 36;
        if (isPerfectSquare(n)) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
 
        n = 12;
        if (isPerfectSquare(n)) {
            System.out.println("Yes");
        } else {
            System.out.println("No");
        }
    }
}
 
// This code is contributed by Prince Kumar


Python3




def is_perfect_square(n):
    i = 1
    while n > 0:
        n -= i
        i += 2
    return n == 0
 
n = 36
if is_perfect_square(n):
    print("Yes")
else:
    print("No")
 
n = 12
if is_perfect_square(n):
    print("Yes")
else:
    print("No")


C#




using System;
 
class Program {
    static bool IsPerfectSquare(int n)
    {
        int i = 1;
        while (n > 0) {
            n -= i;
            i += 2;
        }
        return n == 0;
    }
 
    static void Main(string[] args)
    {
        int n = 36;
        if (IsPerfectSquare(n)) {
            Console.WriteLine("Yes");
        }
        else {
            Console.WriteLine("No");
        }
 
        n = 12;
        if (IsPerfectSquare(n)) {
            Console.WriteLine("Yes");
        }
        else {
            Console.WriteLine("No");
        }
    }
}


Javascript




function is_perfect_square(n) {
    let i = 1;
    while (n > 0) {
        n -= i;
        i += 2;
    }
    return n === 0;
}
 
let n = 36;
if (is_perfect_square(n)) {
    console.log("Yes");
}
else {
    console.log("No");
}
 
n = 12;
if (is_perfect_square(n)) {
    console.log("Yes");
}
else {
    console.log("No");
}


Output

Yes
No

Time complexity: O(sqrt(n)) since it takes at most sqrt(n) iterations to check if a number is a perfect square.
Auxiliary space: O(1).


Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Last Updated : 27 Mar, 2023
Like Article
Save Article
Previous
Next
Similar Reads
Complete Tutorials