Given a non-negative integer n, compute and return the sum of
12 + 22 + 32 + ... + n2
The core challenge of this problem is to compute the sum of squares of the first n
natural numbers efficiently. This problem is significant in various mathematical and computational applications, such as statistical calculations and algorithm analysis. A common pitfall is to overlook the efficiency of the solution, especially for large values of n
.
To solve this problem, we can start with a naive approach and then discuss an optimized solution.
The naive approach involves iterating through each number from 1 to n
and summing their squares. This approach is straightforward but not the most efficient for very large values of n
.
An optimized approach leverages the mathematical formula for the sum of squares of the first n
natural numbers:
Sum = n(n + 1)(2n + 1) / 6
This formula allows us to compute the sum in constant time, O(1), which is significantly faster than the naive approach.
sum
to 0.i
from 1 to n
.i
, add i * i
to sum
.sum
.Sum = n(n + 1)(2n + 1) / 6
to compute the sum directly.
#include <iostream>
int sumOfSquaresNaive(int n) {
int sum = 0;
for (int i = 1; i <= n; ++i) {
sum += i * i; // Add the square of i to sum
}
return sum;
}
int main() {
int n = 3;
std::cout << "Sum of squares (Naive): " << sumOfSquaresNaive(n) << std::endl;
return 0;
}
#include <iostream>
int sumOfSquaresOptimized(int n) {
return (n * (n + 1) * (2 * n + 1)) / 6; // Use the formula to compute the sum
}
int main() {
int n = 3;
std::cout << "Sum of squares (Optimized): " << sumOfSquaresOptimized(n) << std::endl;
return 0;
}
Naive Approach: The time complexity is O(n) because we iterate through each number from 1 to n
. The space complexity is O(1) as we use a constant amount of extra space.
Optimized Approach: The time complexity is O(1) because we compute the sum using a constant-time formula. The space complexity is also O(1).
Consider the following edge cases:
To test the solution comprehensively, consider the following test cases:
When approaching such problems, consider both the brute-force and optimized solutions. Understanding the underlying mathematical principles can often lead to more efficient algorithms. Practice by solving similar problems and studying different algorithms to improve problem-solving skills.
In this blog post, we discussed how to compute the sum of squares of the first n
natural numbers using both naive and optimized approaches. We analyzed the complexity of each approach and provided well-commented C++ code implementations. Understanding and solving such problems is crucial for developing efficient algorithms and improving problem-solving skills.