Check if a given number is a Perfect square using Binary Search

09 Apr, 2021
Check if a given number N is a perfect square or not. If yes then return the number of which it is a perfect square, Else print -1.
Examples: 
Input: N = 4900 Output 70 Explanation: 4900 is a perfect square number of 70 because 70 * 70 = 4900
Input: N = 81 Output: 9 Explanation: 81 is a perfect square number of 9 because 9 * 9 = 81  
Approach: To solve the problem mentioned above we will use the Binary Search Algorithm.  
Find the mid element from the start and last value and compare the value of the square of mid(mid*mid) with N.
If it is equal then return the mid otherwise check if the square(mid*mid) is greater than N then recursive call with the same start value but changed last to mid-1 value and if the square(mid*mid) is less than the N then recursive call with the same last value but changed start value.
If the N is not a square root then return -1.
Below is the implementation of above approach: 
C++
Java
Python3
C#
Javascript
// C++ program to check if a// given number is Perfect// square using Binary Search #include <iostream>using namespace std; // function to check for// perfect square numberint checkPerfectSquare(    long int N,    long int start,    long int last){    // Find the mid value    // from start and last    long int mid = (start + last) / 2;     if (start > last) {        return -1;    }     // check if we got the number which    // is square root of the perfect    // square number N    if (mid * mid == N) {        return mid;    }     // if the square(mid) is greater than N    // it means only lower values then mid    // will be possibly the square root of N    else if (mid * mid > N) {        return checkPerfectSquare(            N, start, mid - 1);    }     // if the square(mid) is less than N    // it means only higher values then mid    // will be possibly the square root of N    else {        return checkPerfectSquare(            N, mid + 1, last);    }} // Driver codeint main(){    long int N = 65;     cout << checkPerfectSquare(N, 1, N);    return 0;}
// Java program to check if a// given number is Perfect// square using Binary Searchimport java.util.*; class GFG { // Function to check for// perfect square numberstatic int checkPerfectSquare(long N,                              long start,                              long last){    // Find the mid value    // from start and last    long mid = (start + last) / 2;     if (start > last)    {        return -1;    }     // Check if we got the number which    // is square root of the perfect    // square number N    if (mid * mid == N)    {        return (int)mid;    }     // If the square(mid) is greater than N    // it means only lower values then mid    // will be possibly the square root of N    else if (mid * mid > N)    {        return checkPerfectSquare(N, start,                                  mid - 1);    }     // If the square(mid) is less than N    // it means only higher values then mid    // will be possibly the square root of N    else    {        return checkPerfectSquare(N, mid + 1,                                  last);    }} // Driver codepublic static void main(String[] args){    long N = 65;    System.out.println(checkPerfectSquare(N, 1, N));}} // This code is contributed by offbeat
# Python3 program to check if a# given number is perfect# square using Binary Search # Function to check for# perfect square numberdef checkPerfectSquare(N, start, last):     # Find the mid value    # from start and last    mid = int((start + last) / 2)     if (start > last):        return -1     # Check if we got the number which    # is square root of the perfect    # square number N    if (mid * mid == N):        return mid     # If the square(mid) is greater than N    # it means only lower values then mid    # will be possibly the square root of N    elif (mid * mid > N):        return checkPerfectSquare(N, start,                                  mid - 1)     # If the square(mid) is less than N    # it means only higher values then mid    # will be possibly the square root of N    else:        return checkPerfectSquare(N, mid + 1,                                  last) # Driver codeN = 65print (checkPerfectSquare(N, 1, N)) # This code is contributed by PratikBasu
// C# program to check if a// given number is Perfect// square using Binary Searchusing System; class GFG{ // Function to check for// perfect square numberpublic static int checkPerfectSquare(int N,                                     int start,                                     int last){    // Find the mid value    // from start and last    int mid = (start + last) / 2;     if (start > last)    {        return -1;    }     // Check if we got the number which    // is square root of the perfect    // square number N    if (mid * mid == N)    {        return mid;    }     // If the square(mid) is greater than N    // it means only lower values then mid    // will be possibly the square root of N    else if (mid * mid > N)    {        return checkPerfectSquare(N, start,                                  mid - 1);    }     // If the square(mid) is less than N    // it means only higher values then mid    // will be possibly the square root of N    else    {        return checkPerfectSquare(N, mid + 1,                                  last);    }} // Driver codepublic static int Main(){    int N = 65;     Console.Write(checkPerfectSquare(N, 1, N));    return 0;}} // This code is contributed by sayesha
<script> // Javascript program to check if a// given number is Perfect// square using Binary Search // Function to check for// perfect square numberfunction checkPerfectSquare(N, start, last){         // Find the mid value    // from start and last    let mid = parseInt((start + last) / 2);     if (start > last)    {        return -1;    }     // Check if we got the number which    // is square root of the perfect    // square number N    if (mid * mid == N)    {        return mid;    }     // If the square(mid) is greater than N    // it means only lower values then mid    // will be possibly the square root of N    else if (mid * mid > N)    {        return checkPerfectSquare(            N, start, mid - 1);    }     // If the square(mid) is less than N    // it means only higher values then mid    // will be possibly the square root of N    else    {        return checkPerfectSquare(            N, mid + 1, last);    }} // Driver codelet N = 65; document.write(checkPerfectSquare(N, 1, N)); // This code is contributed by rishavmahato348 </script>
-1
 
Time Complexity: O(Logn) 
PratikBasu
offbeat
rishavmahato348
Binary Search
maths-perfect-square
tail-recursion
Divide and Conquer
Mathematical
Recursion
Searching
Searching
Mathematical
Recursion
Divide and Conquer
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Binary Search In JavaScript
Find cubic root of a number
Find a Fixed Point (Value equal to index) in a given array
Find element position in given monotonic sequence
Binary Search (bisect) in Python
Program for Fibonacci numbers
C++ Data Types
Set in C++ Standard Template Library (STL)
Write a program to print all permutations of a given string
Operators in C / C++