Related Articles

# Check perfect square using addition/subtraction

• Difficulty Level : Easy
• Last Updated : 01 Apr, 2021

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 :

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

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

 ``

## Javascript

 ``

Output :

```No
Yes```

Time Complexity: O(n)

Auxiliary Space: O(1)
How does this work?
Below is explanation of above approach.

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

Reference:
https://www.geeksforgeeks.org/sum-first-n-odd-numbers-o1-complexity/
http://blog.jgc.org/2008/02/sum-of-first-n-odd-numbers-is-always.html