# Check perfect square using addition/subtraction

Given a positive integer n, check if it is perfect square or not using only addition/subtraction operations and in minimum time complexity.

We strongly recommend you to minimize your browser and try this yourself first.

We can use the property of odd number for this purpose:

```Addition of first n odd numbers is always perfect square
1 + 3 = 4,
1 + 3 + 5 = 9,
1 + 3 + 5 + 7 + 9 + 11 = 36 ...
```

Below is the implementation of above idea :

## C++

 `// C++ program to check if n is perfect square ` `// or not ` `#include ` ` `  `using` `namespace` `std; ` ` `  `// This function returns true if n is ` `// perfect square, else false ` `bool` `isPerfectSquare(``int` `n) ` `{ ` `    ``// sum is sum of all odd numbers. i is ` `    ``// used one by one hold odd numbers ` `    ``for` `(``int` `sum = 0, i = 1; sum < n; i += 2) { ` `        ``sum += i; ` `        ``if` `(sum == n) ` `            ``return` `true``; ` `    ``} ` `    ``return` `false``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``isPerfectSquare(35) ? cout << ``"Yes\n"` `: cout << ``"No\n"``; ` `    ``isPerfectSquare(49) ? cout << ``"Yes\n"` `: cout << ``"No\n"``; ` `    ``return` `0; ` `} `

## Java

 `// Java program to check if n ` `// is perfect square or not ` ` `  `public` `class` `GFG { ` ` `  `    ``// This function returns true if n ` `    ``// is perfect square, else false ` `    ``static` `boolean` `isPerfectSquare(``int` `n) ` `    ``{ ` `        ``// sum is sum of all odd numbers. i is ` `        ``// used one by one hold odd numbers ` `        ``for` `(``int` `sum = ``0``, i = ``1``; sum < n; i += ``2``) { ` `            ``sum += i; ` `            ``if` `(sum == n) ` `                ``return` `true``; ` `        ``} ` `        ``return` `false``; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `main(String args[]) ` `    ``{ ` ` `  `        ``if` `(isPerfectSquare(``35``)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"NO"``); ` ` `  `        ``if` `(isPerfectSquare(``49``)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by Sam007 `

## Python3

 `# This function returns true if n is ` `# perfect square, else false ` `def` `isPerfectSquare(n): ` ` `  `    ``# the_sum is sum of all odd numbers. i is ` `    ``# used one by one hold odd numbers ` `    ``i ``=` `1` `    ``the_sum ``=` `0` `    ``while` `the_sum < n: ` `        ``the_sum ``+``=` `i ` `        ``if` `the_sum ``=``=` `n: ` `            ``return` `True` `        ``i ``+``=` `2` `    ``return` `False` ` `  `# Driver code ` `if` `__name__ ``=``=` `"__main__"``: ` `    ``print``(``'Yes'``) ``if` `isPerfectSquare(``35``) ``else` `print``(``'NO'``) ` `    ``print``(``'Yes'``) ``if` `isPerfectSquare(``49``) ``else` `print``(``'NO'``) ` ` `  `# This code works only in Python 3 `

## C#

 `// C# program to check if n ` `// is perfect square or not ` `using` `System; ` ` `  `public` `class` `GFG { ` ` `  `    ``// This function returns true if n ` `    ``// is perfect square, else false ` `    ``static` `bool` `isPerfectSquare(``int` `n) ` `    ``{ ` `        ``// sum is sum of all odd numbers. i is ` `        ``// used one by one hold odd numbers ` `        ``for` `(``int` `sum = 0, i = 1; sum < n; i += 2) { ` `            ``sum += i; ` `            ``if` `(sum == n) ` `                ``return` `true``; ` `        ``} ` `        ``return` `false``; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` ` `  `        ``if` `(isPerfectSquare(35)) ` `            ``Console.WriteLine(``"Yes"``); ` `        ``else` `            ``Console.WriteLine(``"No"``); ` ` `  `        ``if` `(isPerfectSquare(49)) ` `            ``Console.WriteLine(``"Yes"``); ` `        ``else` `            ``Console.WriteLine(``"No"``); ` `    ``} ` `} ` ` `  `// This code is contributed by Sam007. `

## PHP

 ` `

Output :

```No
Yes```

How does this work?
Below is explanation of above approach.

```1 + 3 + 5 + ...  (2n-1) = &Sum;(2*i - 1) where 1<=i<=n
= 2*&Sum;i - &Sum;1  where 1<=i<=n
= 2n(n+1)/2 - n
= n(n+1) - n
= n2```

My Personal Notes arrow_drop_up

Improved By : Sam007, jit_t

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.