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

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

Previous
Next