
- Data Structures & Algorithms
- DSA - Home
- DSA - Overview
- DSA - Environment Setup
- Algorithm
- DSA - Algorithms Basics
- DSA - Asymptotic Analysis
- DSA - Greedy Algorithms
- DSA - Divide and Conquer
- DSA - Dynamic Programming
- Data Structures
- DSA - Data Structure Basics
- DSA - Data Structures and Types
- DSA - Array Data Structure
- Linked Lists
- DSA - Linked List Basics
- DSA - Doubly Linked List
- DSA - Circular Linked List
- Stack & Queue
- DSA - Stack
- DSA - Expression Parsing
- DSA - Queue
- Searching Techniques
- DSA - Linear Search
- DSA - Binary Search
- DSA - Interpolation Search
- DSA - Hash Table
- Sorting Techniques
- DSA - Sorting Algorithms
- DSA - Bubble Sort
- DSA - Insertion Sort
- DSA - Selection Sort
- DSA - Merge Sort
- DSA - Shell Sort
- DSA - Quick Sort
- Graph Data Structure
- DSA - Graph Data Structure
- DSA - Depth First Traversal
- DSA - Breadth First Traversal
- Tree Data Structure
- DSA - Tree Data Structure
- DSA - Tree Traversal
- DSA - Binary Search Tree
- DSA - AVL Tree
- DSA - Red Black Trees
- DSA - B Trees
- DSA - B+ Trees
- DSA - Splay Trees
- DSA - Spanning Tree
- DSA - Tries
- DSA - Heap
- Recursion
- DSA - Recursion Basics
- DSA - Tower of Hanoi
- DSA - Fibonacci Series
- DSA Useful Resources
- DSA - Questions and Answers
- DSA - Quick Guide
- DSA - Useful Resources
- DSA - Discussion
Square pyramidal number (Sum of Squares)
A Square Pyramidal Number means the Sum of the Square of Natural Numbers. Natural Numbers include all the numbers from 1 to infinity. For example, the first 4 Square pyramidal numbers are 1, 5, 14, 30.
For better perception, consider the fact: If we take spheres of numbers equal to the square pyramidal numbers, starting from one, and stack them in descending order, they create a pyramid.
Problem Statement
Given a number Sum. If Sum is the sum of the squares of first “n” natural numbers, return n, otherwise return false.
Example 1
Input = 30 Output = 4
Explanation = 30 is the sum of squares of the first 4 natural numbers.
1*1 + 2*2 + 3*3 +4*4 = 30.
Hence, the output should be 4.
Example 2
Input = 54 Output = -1
Explanation = No sum of squares of n natural numbers gives 54. Hence, the output should be -1.
Solution of Problem Statement
There are 2 solutions to the problem.
Approach 1: Brute Force Approach
Brute force approach is to start from n= 1. Create a variable ‘total’ and add the square of the next natural number to the previous value of total. If total becomes equal to the Sum return n and, else if, total becomes greater than the Sum, return false.
Pseudocode
start n =1 While (total < sum ): Total += n*n n=n+1 if(total == sum) : Return n Else: Return false end
Example
Below is a C++ program to check if a given number is total of squares of natural numbers.
#include <iostream> using namespace std; // This function returns n if the sum of squares of first // n natural numbers is equal to the given sum // Else it returns -1 int square_pyramidal_number(int sum) { // initialize total int total = 0; // Return -1 if Sum is <= 0 if(sum <= 0){ return -1; } // Adding squares of the numbers starting from 1 int n = 0; while ( total < sum){ n++; total += n * n; } // If total becomes equal to sum return n if (total == sum) return n; return -1; } int main(){ int S = 30; int n = square_pyramidal_number(S); cout<< "Number of Square Pyramidal Numbers whose sum is 30: "<< endl; (n) ? cout << n : cout << "-1"; return 0; }
Output
Number of Square Pyramidal Numbers whose sum is 30: 4
Time Complexity - O(sum), where sum is the given input.
Space Complexity - O(1) : No extra space used.
Approach 2: Using Newton Raphson Method
Another approach is Newton Raphson Method. Newton Raphson Method is used to find the root of a given function f(x) and an initial guess for a root.
sum of squares of first n natural numbers = n * (n + 1) * (2*n + 1) / 6, n * (n + 1) * (2*n + 1) / 6 = sum or k * (k + 1) * (2*k + 1) – 6*sum = 0
So n is the root of this cubic equation, which can be calculated using Newton Raphson Method which involves Starting from initial guess x0, the Newton Raphson method uses the below formula to find the next value of x, i.e., xn+1 from previous value xn.
$$\mathrm{x_{1}=x_{0}-\frac{f(x_{0})}{f^{'}(x_{0})}}$$
Pseudocode
Start calculate func(x) and derivativeFunction(x) for given initial x Compute h: h = func(x) / derivFunc(x) While h is greater than allowed error ε h = func(x) / derivFunc(x) x = x – h If (x is an integer): return x Else: return -1; end
Example
Below is a C++ Program to check if a given number is a total of squares of natural numbers.
#include<bits/stdc++.h> #define EPSILON 0.001 using namespace std; // According to Newton Raphson Method The function is // k * (k + 1) * (2*k + 1) – 6*sum or 2*k*k*k + 3*k*k + k - 6*sum double func(double k, int sum){ return 2*k*k*k + 3*k*k + k - 6*sum; } // Derivative of the above function is 6*k*k + 6*k + 1 double derivativeFunction(double k){ return 6*k*k + 6*k + 1; } // Function to check if double is an integer or not bool isInteger(double N){ int X = N; double temp2 = N - X; if (temp2*10 >=1 ) { return false; } return true; } // Function that finds the root of k * (k + 1) * (2*k + 1) – 6*sum int newtonRaphson(double k, int sum){ double h = func(k, sum) / derivativeFunction(k); while (abs(h) >= EPSILON){ h = func(k, sum)/derivativeFunction(k); // k(i+1) = k(i) - f(k) / f'(k) k = k - h; } if (isInteger(k)) { return (int)k; } else { return -1; } } // Driver program int main(){ double x0 = 1; // Initial values assumed int sum = 91; int n = newtonRaphson(x0,sum); cout<< "Number of Square Pyramidal Numbers whose sum is 91: "<< endl; (n) ? cout << n : cout << "-1"; return 0; }
Output
Number of Square Pyramidal Numbers whose sum is 91: 6
Time Complexity - O((log n) F(n)) where F(n) is the cost of calculating f(x)/f'(x), with n-digit precision.
Space Complexity - O(1) : No extra space used.
Conclusion
This article solved the problem of finding Square pyramidal number for a given sum. We saw two approaches: a brute force approach, and an efficient one. C++ programs are provided for both of the approaches.
- Related Articles
- Difference between sum of the squares of and square of sum first n natural numbers.
- Find the Pentagonal Pyramidal Number using C++
- Minimum number of squares whose sum equals to given number n\n
- Is a number sum of two perfect squares in JavaScript
- Sum of squares of binomial coefficients in C++
- Sum of squares of Fibonacci numbers in C++
- Difference between sum of square and square of sum in JavaScript
- Sum of series with alternate signed squares of AP
- Prove that the sum of the squares of the diagonals of parallelogram is equal to the sum of the squares of its sides.
- Prove that the sum of the squares of the sides of a rhombus is equal to the sum of the squares of its diagonals.
- Prove that in a right angle triangle, the square of the hypotenuse is equal the sum of squares of the other two sides.
- The difference of squares of two numbers is 180. The square of the smaller number is 8 times the larger number. Find the two numbers.
- Write true (T) or false (F) for the following statements.(i) The number of digits in a square number is even.(ii) The square of a prime number is prime.(iii) The sum of two square numbers is a square number.(iv) The difference of two square numbers is a square number.(v) The product of two square numbers is a square number.(vi) No square number is negative.(vii) There is not square number between 50 and 60.(viii) There are fourteen square numbers upto 200.
- Sum of squares of first n natural numbers in C Program?
- Python Program for Sum of squares of first n natural numbers
