# Check if a number is perfect square without finding square root

• Difficulty Level : Easy
• Last Updated : 26 Jul, 2022

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 ``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

 `

## Javascript

 ``

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 ``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

 ``

Output

`Yes`

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

My Personal Notes arrow_drop_up