Open In App
Related Articles

Check if a number is perfect square without finding square root

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report

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).



Last Updated : 27 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads