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 = 14Input : 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++
// C++ program to check if a // given number is sum of // squares of natural numbers. #include <iostream> using namespace std; // Function to find if the // given number is sum of // the squares of first n // natural numbers int findS( int s) { int sum = 0; // Start adding squares of // the numbers from 1 for ( int n = 1; sum < s; n++) { sum += n * n; // If sum becomes equal to s // return n if (sum == s) return n; } return -1; } // Drivers code int main() { int s = 13; int n = findS(s); n == -1 ? cout << "-1" : cout << n; return 0; } |
C
// C program to check if a // given number is sum of // squares of natural numbers. #include <stdio.h> // Function to find if the // given number is sum of // the squares of first n // natural numbers int findS( int s) { int sum = 0; // Start adding squares of // the numbers from 1 for ( int n = 1; sum < s; n++) { sum += n * n; // If sum becomes equal to s // return n if (sum == s) return n; } return -1; } // Drivers code int main() { int s = 13; int n = findS(s); n == -1 ? printf ( "-1" ) : printf ( "%d" ,n); return 0; } // This code is contributed by kothavvsaakash. |
Java
// Java program to check if a // given number is sum of // squares of natural numbers. class GFG { // Function to find if the // given number is sum of // the squares of first // n natural numbers static int findS( int s) { int sum = 0 ; // Start adding squares of // the numbers from 1 for ( int n = 1 ; sum < s; n++) { sum += n * n; // If sum becomes equal to s // return n if (sum == s) return n; } return - 1 ; } // Drivers code 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
# Python3 program to find if # the given number is sum of # the squares of first # n natural numbers # Function to find if the given # number is sum of the squares # of first n natural numbers def findS (s): _sum = 0 n = 1 # Start adding squares of # the numbers from 1 while (_sum < s): _sum + = n * n n + = 1 n - = 1 # If sum becomes equal to s # return n if _sum = = s: return n return - 1 # Driver code s = 13 n = findS (s) if n = = - 1 : print ( "-1" ) else : print (n) |
C#
// C# program to check if a given // number is sum of squares of // natural numbers. using System; class GFG { // Function to find if the given // number is sum of the squares // of first n natural numbers static int findS( int s) { int sum = 0; // Start adding squares of // the numbers from 1 for ( int n = 1; sum < s; n++) { sum += n * n; // If sum becomes equal // to s return n if (sum == s) return n; } return -1; } // Drivers code public static void Main() { int s = 13; int n = findS(s); if (n == -1) Console.Write( "-1" ) ; else Console.Write(n); } } // This code is contribute by // Smitha Dinesh Semwal |
PHP
<?php // PHP program to check if a // given number is sum of // squares of natural numbers. // Function to find if the given number // is sum of the squares of first n // natural numbers function findS( $s ) { $sum = 0; // Start adding squares of // the numbers from 1 for ( $n = 1; $sum < $s ; $n ++) { $sum += $n * $n ; // If sum becomes equal to s // return n if ( $sum == $s ) return $n ; } return -1; } // Drivers code $s = 13; $n = findS( $s ); if ( $n == -1) echo ( "-1" ); else echo ( $n ); // This code is contributed by Ajit. ?> |
Javascript
<script> // JavaScript to check if a // given number is sum of // squares of natural numbers. // Function to find if the // given number is sum of // the squares of first // n natural numbers function findS(s) { let sum = 0; // Start adding squares of // the numbers from 1 for (let n = 1; sum < s; n++) { sum += n * n; // If sum becomes equal to s // return n if (sum == s) return n; } return -1; } // Driver code let s = 13; let n = findS(s); if (n == -1) document.write( "-1" ); else document.write(n); // This code is contributed by souravghosh0416. </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.
Please Login to comment...