Given a positive integer n, check if it is perfect square or not using only addition/subtraction operations and in minimum time complexity.
Examples :
Input : n = 36
Output : YesInput : n = 2500
Output : Yes
Explanation: 2500 is a perfect square of 50Input : n = 8
Output : No
Try It Yourself
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++ program to check if n is perfect square
// or not
#include <bits/stdc++.h>
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 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
# 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# 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.
<script>
// JavaScript program to check if n
// is perfect square or not
// This function returns true if n
// is perfect square, else false
function isPerfectSquare(n)
{
// sum is sum of all odd numbers. i is
// used one by one hold odd numbers
for (let sum = 0, i = 1; sum < n; i += 2) {
sum += i;
if (sum == n)
return true;
}
return false;
}
// Driver Code
if (isPerfectSquare(35))
document.write("Yes" + "<br/>");
else
document.write("NO" + "<br/>");
if (isPerfectSquare(49))
document.write("Yes" + "<br/>");
else
document.write("No" + "<br/>");
// This code is contributed by target_2.
</script>
<?php
// PHP program to check if n is
// perfect square or not
// This function returns true if n is
// perfect square, else false
function isPerfectSquare($n)
{
// sum is sum of all odd numbers.
// i is used one by one hold odd
// numbers
for ( $sum = 0, $i = 1; $sum < $n;
$i += 2)
{
$sum += $i;
if ($sum == $n)
return true;
}
return false;
}
// Driver code
if(isPerfectSquare(35))
echo "Yes\n";
else
echo "No\n";
if(isPerfectSquare(49))
echo "Yes\n";
else
echo "No\n";
// This code is contributed by ajit.
?>
Output :
No
Yes
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
Check if given number is perfect square
Please refer the above article for all approaches and detailed explanation.