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 :

## 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
This article is contributed by Utkarsh Trivedi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up