Given n, find sum of squares of first n natural numbers.
Examples :
Input : n = 2
Output : 5
Explanation: 1^2+2^2 = 5
Input : n = 8
Output : 204
Explanation :
1^2 + 2^2 + 3^2 + 4^2 + 5^2 + 6^2 + 7^2 + 8^2 = 204
Naive approach :
A naive approach will be to run a loop from 1 to n and sum up all the squares.
C
#include <stdio.h>
int summation( int n)
{
int sum = 0;
for ( int i = 1; i <= n; i++)
sum += (i * i);
return sum;
}
int main()
{
int n = 2;
printf ( "%d" ,summation(n));
return 0;
}
|
C++
#include <iostream>
using namespace std;
int summation( int n)
{
int sum = 0;
for ( int i = 1; i <= n; i++)
sum += (i * i);
return sum;
}
int main()
{
int n = 2;
cout << summation(n);
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
class GFG
{
public static int summation( int n)
{
int sum = 0 ;
for ( int i = 1 ; i <= n; i++)
sum += (i * i);
return sum;
}
public static void main(String args[])
{
int n = 2 ;
System.out.println(summation(n));
}
}
|
Python3
def summation(n):
return sum ([i * * 2 for i in
range ( 1 , n + 1 )])
if __name__ = = "__main__" :
n = 2
print (summation(n))
|
Javascript
<script>
function summation(n)
{
let sum = 0;
for (let i = 1; i <= n; i++)
sum += (i * i);
return sum;
}
let n = 2;
document.write(summation(n));
</script>
|
C#
using System;
class GFG
{
public static int summation( int n)
{
int sum = 0;
for ( int i = 1; i <= n; i++)
sum += (i * i);
return sum;
}
public static void Main()
{
int n = 2;
Console.WriteLine(summation(n));
}
}
|
PHP
<?php
function summation( $n )
{
$sum = 0;
for ( $i = 1; $i <= $n ; $i ++)
$sum += ( $i * $i );
return $sum ;
}
$n = 2;
echo summation( $n );
?>
|
Time Complexity: O(n)
Auxiliary Space: O(1), since no extra space has been taken.
Efficient Approach :
There exists a formula for finding the sum of squares of first n numbers.
1 + 2 + ……….. + n = n(n+1) / 2
12 + 22 + ……… + n2 = n(n+1)(2n+1) / 6
n * (n + 1) * (2*n + 1) / 6
Example : n = 3
= 3 * (3 + 1) * (2*3 + 1) / 6
= (3 * 4 * 7) / 6
= 84 / 6
= 14
How does this work?
We can prove this formula using induction.
We can easily see that the formula is true for
n = 1 and n = 2 as sums are 1 and 5 respectively.
Let it be true for n = k-1. So sum of k-1 numbers
is (k - 1) * k * (2 * k - 1)) / 6
In the following steps, we show that it is true
for k assuming that it is true for k-1.
Sum of k numbers = Sum of k-1 numbers + k2
= (k - 1) * k * (2 * k - 1) / 6 + k2
= ((k2 - k) * (2*k - 1) + 6k2)/6
= (2k3 - 2k2 - k2 + k + 6k2)/6
= (2k3 + 3k2 + k)/6
= k * (k + 1) * (2*k + 1) / 6
C
#include <stdio.h>
int summation( int n)
{
return (n * (n + 1) *
(2 * n + 1)) / 6;
}
int main()
{
int n = 10;
printf ( "%d" , summation(n));
return 0;
}
|
C++
#include <iostream>
using namespace std;
int summation( int n)
{
return (n * (n + 1) *
(2 * n + 1)) / 6;
}
int main()
{
int n = 10;
cout << summation(n) << endl;
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
class GFG
{
public static int summation( int n)
{
return (n * (n + 1 ) *
( 2 * n + 1 )) / 6 ;
}
public static void main(String args[])
{
int n = 10 ;
System.out.println(summation(n));
}
}
|
Python3
def summation(n):
return (n * (n + 1 ) *
( 2 * n + 1 )) / 6
if __name__ = = '__main__' :
n = 10
print (summation(n))
|
Javascript
<p id= "demo" ></p>
<script>
var x = summation(10);
document.getElementById( "demo" ).innerHTML = x;
function summation(n) {
return (n * (n + 1) *
(2 * n + 1)) / 6;
}
</script>
|
C#
using System;
class GFG
{
public static int summation( int n)
{
return (n * (n + 1) *
(2 * n + 1)) / 6;
}
public static void Main()
{
int n = 10;
Console.WriteLine(summation(n));
}
}
|
PHP
<?php
function summation( $n )
{
return ( $n * ( $n + 1) *
(2 * $n + 1)) / 6;
}
$n = 10;
echo summation( $n );
?>
|
Time Complexity: O(1)
Auxiliary Space: O(1)
Avoiding the overflow:
In the above method, sometimes due to large value of n, the value of (n * (n + 1) * (2 * n + 1)) would overflow. We can avoid this overflow up to some extent using the fact that n*(n+1) must be divisible by 2.
Below is the code for the above approach.
C++
#include <iostream>
using namespace std;
int summation( int n)
{
return (n * (n + 1) / 2) * (2 * n + 1) / 3;
}
int main()
{
int n = 10;
cout << summation(n) << endl;
return 0;
}
|
Java
import java.io.*;
class GFG {
static int summation( int n)
{
return (n * (n + 1 ) / 2 ) * ( 2 * n + 1 ) / 3 ;
}
public static void main (String[] args) {
int n = 10 ;
System.out.println(summation(n));
}
}
|
Python3
def summation(n):
return (n * (n + 1 ) / / 2 ) * ( 2 * n + 1 ) / / 3
def main():
n = 10
print (summation(n))
if __name__ = = "__main__" :
main()
|
Javascript
function summation(n)
{
return (n * (n + 1) / 2) * (2 * n + 1) / 3;
}
n = 10;
console.log(summation(n));
|
C#
using System;
class MainClass
{
public static int Summation( int n)
{
return (n * (n + 1) / 2) * (2 * n + 1) / 3;
}
public static void Main( string [] args)
{
int n = 10;
Console.WriteLine(Summation(n));
}
}
|
Time complexity: O(1)
Auxiliary Space: O(1)
Method 4: Using recursion
1. The function sum_of_squares(n) is defined with n as the parameter.
2. The base case is defined where if n equals 1, then the function returns 1.
3. For values of n greater than 1, the function returns the square of n plus the sum of squares of n-1.
4. The function is called with n=8 using print(sum_of_squares(n)).
5. Since n is greater than 1, the function returns 8^2 + sum_of_squares(7).
6. In the next recursion, n=7, so the function returns 7^2 + sum_of_squares(6).
7. This recursion continues until the base case is reached for n=1, where the function returns 1.
8. The final value of the sum of squares for n=8 is calculated as 1^2 + 2^2 + 3^2 + … + 7^2 + 8^2 = 204.
C++
#include <iostream>
int sum_of_squares( int n) {
if (n == 1) {
return 1;
} else {
return n * n + sum_of_squares(n - 1);
}
}
int main() {
int n = 8;
std::cout << sum_of_squares(n) << std::endl;
return 0;
}
|
Java
public class Main {
public static int sum_of_squares( int n) {
if (n == 1 ) {
return 1 ;
} else {
return n * n + sum_of_squares(n - 1 );
}
}
public static void main(String[] args) {
int n = 8 ;
System.out.println(sum_of_squares(n));
}
}
|
Python3
def sum_of_squares(n):
if n = = 1 :
return 1
else :
return n * * 2 + sum_of_squares(n - 1 )
n = 8
print (sum_of_squares(n))
|
Javascript
function sumOfSquares(n) {
if (n == 1) {
return 1;
} else {
return n * n + sumOfSquares(n - 1);
}
}
let n = 8;
console.log(sumOfSquares(n));
|
C#
using System;
class Program {
static int SumOfSquares( int n)
{
if (n == 1) {
return 1;
}
else {
return n * n + SumOfSquares(n - 1);
}
}
static void Main( string [] args)
{
int n = 8;
Console.WriteLine(SumOfSquares(n));
}
}
|
Time complexity of this function is O(n), since the function needs to call itself recursively n times.
The space complexity is also O(n) due to the recursive calls on the stack.
Please Login to comment...