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

Last Updated : 27 Mar, 2023

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)

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