Square pyramidal number (Sum of Squares)
A Square pyramidal number represents sum of squares of first natural numbers. First few Square pyramidal numbers are 1, 5, 14, 30, 55, 91, 140, 204, 285, 385, 506, …
Geometrically these numbers represent number of spheres to be stacked to form a pyramid with square base. Please see this Wiki image for more clarity.
Given a number s (1 <= s <= 1000000000). If s is sum of the squares of the first n natural numbers then print n, otherwise print -1.
Examples :
Input : 14
Output : 3
Explanation : 1*1 + 2*2 + 3*3 = 14
Input : 26
Output : -1
A simple solution is to run through all numbers starting from 1, compute current sum. If current sum is equal to given sum, then we return true, else false.
C++
#include <iostream>
using namespace std;
int findS( int s)
{
int sum = 0;
for ( int n = 1; sum < s; n++)
{
sum += n * n;
if (sum == s)
return n;
}
return -1;
}
int main()
{
int s = 13;
int n = findS(s);
n == -1 ? cout << "-1" : cout << n;
return 0;
}
|
C
#include <stdio.h>
int findS( int s)
{
int sum = 0;
for ( int n = 1; sum < s; n++)
{
sum += n * n;
if (sum == s)
return n;
}
return -1;
}
int main()
{
int s = 13;
int n = findS(s);
n == -1 ? printf ( "-1" ) : printf ( "%d" ,n);
return 0;
}
|
Java
class GFG
{
static int findS( int s)
{
int sum = 0 ;
for ( int n = 1 ; sum < s; n++)
{
sum += n * n;
if (sum == s)
return n;
}
return - 1 ;
}
public static void main(String[] args)
{
int s = 13 ;
int n = findS(s);
if (n == - 1 )
System.out.println( "-1" );
else
System.out.println(n);
}
}
|
Python3
def findS (s):
_sum = 0
n = 1
while (_sum < s):
_sum + = n * n
n + = 1
n - = 1
if _sum = = s:
return n
return - 1
s = 13
n = findS (s)
if n = = - 1 :
print ( "-1" )
else :
print (n)
|
C#
using System;
class GFG
{
static int findS( int s)
{
int sum = 0;
for ( int n = 1; sum < s; n++)
{
sum += n * n;
if (sum == s)
return n;
}
return -1;
}
public static void Main()
{
int s = 13;
int n = findS(s);
if (n == -1)
Console.Write( "-1" ) ;
else
Console.Write(n);
}
}
|
PHP
<?php
function findS( $s )
{
$sum = 0;
for ( $n = 1; $sum < $s ; $n ++)
{
$sum += $n * $n ;
if ( $sum == $s )
return $n ;
}
return -1;
}
$s = 13;
$n = findS( $s );
if ( $n == -1)
echo ( "-1" );
else
echo ( $n );
?>
|
Javascript
<script>
function findS(s)
{
let sum = 0;
for (let n = 1; sum < s; n++)
{
sum += n * n;
if (sum == s)
return n;
}
return -1;
}
let s = 13;
let n = findS(s);
if (n == -1)
document.write( "-1" );
else
document.write(n);
</script>
|
OUTPUT :
-1
Time complexity: O(s) for given input s
Space complexity: O(1)
An alternate solution is to use Newton Raphson Method.
We know sum of squares of first n natural numbers is n * (n + 1) * (2*n + 1) / 6.
We can write solutions as
k * (k + 1) * (2*k + 1) / 6 = s
k * (k + 1) * (2*k + 1) – 6s = 0
We can find roots of above cubic equation using Newton Raphson Method, then check if root is integer or not.
Last Updated :
20 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...