Sum of squares of Fibonacci numbers
Last Updated :
07 Jul, 2022
Given a positive integer N. The task is to find the sum of squares of all Fibonacci numbers up to N-th Fibonacci number. That is,
f02 + f12 + f22+.......+fn2
where fi indicates i-th fibonacci number.
Fibonacci numbers: f0=0 and f1=1 and fi=fi-1 + fi-2 for all i>=2.
Examples:
Input: N = 3
Output: 6
Explanation: 0 + 1 + 1 + 4 = 6
Input: N = 6
Output: 104
Explanation: 0 + 1 + 1 + 4 + 9 + 25 + 64 = 104
Method 1: Find all Fibonacci numbers till N and add up their squares. This method will take O(n) time complexity.
Below is the implementation of this approach:
C++
#include <bits/stdc++.h>
using namespace std;
int calculateSquareSum( int n)
{
if (n <= 0)
return 0;
int fibo[n + 1];
fibo[0] = 0, fibo[1] = 1;
int sum = (fibo[0] * fibo[0]) + (fibo[1] * fibo[1]);
for ( int i = 2; i <= n; i++) {
fibo[i] = fibo[i - 1] + fibo[i - 2];
sum += (fibo[i] * fibo[i]);
}
return sum;
}
int main()
{
int n = 6;
cout << "Sum of squares of Fibonacci numbers is : "
<< calculateSquareSum(n) << endl;
return 0;
}
|
Java
public class Improve {
static int calculateSquareSum( int n)
{
if (n <= 0 )
return 0 ;
int fibo[] = new int [n+ 1 ];
fibo[ 0 ] = 0 ;
fibo[ 1 ] = 1 ;
int sum = (fibo[ 0 ] * fibo[ 0 ]) + (fibo[ 1 ] * fibo[ 1 ]);
for ( int i = 2 ; i <= n; i++) {
fibo[i] = fibo[i - 1 ] + fibo[i - 2 ];
sum += (fibo[i] * fibo[i]);
}
return sum;
}
public static void main(String args[])
{
int n = 6 ;
System.out.println( "Sum of squares of Fibonacci numbers is : " +
calculateSquareSum(n));
}
}
|
Python3
def calculateSquareSum(n):
fibo = [ 0 ] * (n + 1 );
if (n < = 0 ):
return 0 ;
fibo[ 0 ] = 0 ;
fibo[ 1 ] = 1 ;
sum = ((fibo[ 0 ] * fibo[ 0 ]) +
(fibo[ 1 ] * fibo[ 1 ]));
for i in range ( 2 , n + 1 ):
fibo[i] = (fibo[i - 1 ] +
fibo[i - 2 ]);
sum + = (fibo[i] * fibo[i]);
return sum ;
n = 6 ;
print ( "Sum of squares of Fibonacci numbers is :" ,
calculateSquareSum(n));
|
C#
using System;
public class Improve {
static int calculateSquareSum( int n)
{
if (n <= 0)
return 0;
int [] fibo = new int [n+1];
fibo[0] = 0 ;
fibo[1] = 1 ;
int sum = (fibo[0] * fibo[0]) + (fibo[1] * fibo[1]);
for ( int i = 2; i <= n; i++) {
fibo[i] = fibo[i - 1] + fibo[i - 2];
sum += (fibo[i] * fibo[i]);
}
return sum;
}
public static void Main()
{
int n = 6;
Console.Write( "Sum of squares of Fibonacci numbers is : " +
calculateSquareSum(n));
}
}
|
PHP
<?php
function calculateSquareSum( $n )
{
if ( $n <= 0)
return 0;
$fibo [0] = 0;
$fibo [1] = 1;
$sum = ( $fibo [0] * $fibo [0]) +
( $fibo [1] * $fibo [1]);
for ( $i = 2; $i <= $n ; $i ++)
{
$fibo [ $i ] = $fibo [ $i - 1] +
$fibo [ $i - 2];
$sum += ( $fibo [ $i ] * $fibo [ $i ]);
}
return $sum ;
}
$n = 6;
echo "Sum of squares of Fibonacci numbers is : " ,
calculateSquareSum( $n );
?>
|
Javascript
<script>
function calculateSquareSum(n)
{
if (n <= 0)
return 0;
var fibo = Array(n + 1).fill(0);
fibo[0] = 0;
fibo[1] = 1;
var sum = (fibo[0] * fibo[0]) +
(fibo[1] * fibo[1]);
for (i = 2; i <= n; i++) {
fibo[i] = fibo[i - 1] + fibo[i - 2];
sum += (fibo[i] * fibo[i]);
}
return sum;
}
var n = 6;
document.write(
"Sum of squares of Fibonacci numbers is :"
+ calculateSquareSum(n)
);
</script>
|
Output:
Sum of squares of Fibonacci numbers is : 104
Time Complexity: O(n)
Auxiliary Space: O(n)
Method 2: We know that for i-th Fibonacci number,
fi+1 = fi + fi-1 for all i>0
Or, fi = fi+1 - fi-1 for all i>0
Or, fi2 = fifi+1 - fi-1fi
So for any n>0 we see,
f02 + f12 + f22+…….+fn2
= f02 + ( f1f2– f0f1)+(f2f3 – f1f2 ) +………….+ (fnfn+1 – fn-1fn )
= fnfn+1 (Since f0 = 0)
This identity also satisfies for n=0 (For n=0, f02 = 0 = f0 f1).
Therefore, to find the sum, it is only needed to find fn and fn+1. To find fn in O (log n) time. Refer to Method 5 or method 6 of this article.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000;
int f[MAX] = { 0 };
int fib( int n)
{
if (n == 0)
return 0;
if (n == 1 || n == 2)
return (f[n] = 1);
if (f[n])
return f[n];
int k = (n & 1) ? (n + 1) / 2 : n / 2;
f[n] = (n & 1) ? (fib(k) * fib(k) + fib(k - 1) * fib(k - 1))
: (2 * fib(k - 1) + fib(k)) * fib(k);
return f[n];
}
int calculateSumOfSquares( int n)
{
return fib(n) * fib(n + 1);
}
int main()
{
int n = 6;
cout << "Sum of Squares of Fibonacci numbers is : "
<< calculateSumOfSquares(n) << endl;
return 0;
}
|
Java
class gfg {
static int [] f = new int [ 1000 ];
public static int fib( int n) {
if (n == 0 ) {
return 0 ;
}
if (n == 1 || n == 2 ) {
return (f[n] = 1 );
}
if (f[n] > 0 ) {
return f[n];
}
int k = ((n & 1 ) > 0 ) ? (n + 1 ) / 2 : n / 2 ;
f[n] = ((n & 1 ) > 0 ) ? (fib(k)
* fib(k) + fib(k - 1 ) * fib(k - 1 ))
: ( 2 * fib(k - 1 ) + fib(k)) * fib(k);
return f[n];
}
public static int calculateSumOfSquares( int n) {
return fib(n) * fib(n + 1 );
}
}
class geek {
public static void main(String[] args) {
gfg g = new gfg();
int n = 6 ;
System.out.println( "Sum of Squares of Fibonacci numbers is : "
+ g.calculateSumOfSquares(n));
}
}
|
Python3
MAX = 1000
f = [ 0 for i in range ( MAX )]
def fib(n):
if n = = 0 :
return 0
if n = = 1 or n = = 2 :
return 1
if f[n]:
return f[n]
if n & 1 :
k = (n + 1 ) / / 2
else :
k = n / / 2
if n & 1 :
f[n] = (fib(k) * fib(k) +
fib(k - 1 ) * fib(k - 1 ))
else :
f[n] = (( 2 * fib(k - 1 ) +
fib(k)) * fib(k))
return f[n]
def calculateSumOfSquares(n):
return fib(n) * fib(n + 1 )
n = 6
print ( "Sum of Squares of "
"Fibonacci numbers is :" ,
calculateSumOfSquares(n))
|
C#
using System;
class gfg
{
int []f = new int [1000];
public int fib( int n)
{
if (n == 0)
return 0;
if (n == 1 || n == 2)
return (f[n] = 1);
if (f[n]>0)
return f[n];
int k = ((n & 1)>0) ? (n + 1) / 2 : n / 2;
f[n] = ((n & 1)>0) ? (fib(k) * fib(k) + fib(k - 1) * fib(k - 1))
: (2 * fib(k - 1) + fib(k)) * fib(k);
return f[n];
}
public int calculateSumOfSquares( int n)
{
return fib(n) * fib(n + 1);
}
}
class geek
{
public static int Main()
{
gfg g = new gfg();
int n = 6;
Console.WriteLine( "Sum of Squares of Fibonacci numbers is : {0}" , g.calculateSumOfSquares(n));
return 0;
}
}
|
PHP
<?php
$MAX = 1000;
global $f ;
$f = array_fill (0, $MAX , 0);
function fib( $n )
{
if ( $n == 0)
return 0;
if ( $n == 1 || $n == 2)
return ( $f [ $n ] = 1);
$k = ( $n & 1) ? ( $n + 1) / 2 : $n / 2;
$f [ $n ] = ( $n & 1) ? (fib( $k ) * fib( $k ) +
fib( $k - 1) * fib( $k - 1)) :
(2 * fib( $k - 1) + fib( $k )) * fib( $k );
return $f [ $n ];
}
function calculateSumOfSquares( $n )
{
return fib( $n ) * fib( $n + 1);
}
$n = 6;
echo "Sum of Squares of Fibonacci numbers is : " ;
echo calculateSumOfSquares( $n );
?>
|
Javascript
<script>
let f = new Array(1000);
f.fill(0);
function fib(n) {
if (n == 0) {
return 0;
}
if (n == 1 || n == 2) {
return (f[n] = 1);
}
if (f[n] > 0) {
return f[n];
}
let k = ((n & 1) > 0) ? (n + 1) / 2 : n / 2;
f[n] = ((n & 1) > 0) ? (fib(k)
* fib(k) + fib(k - 1) * fib(k - 1))
: (2 * fib(k - 1) + fib(k)) * fib(k);
return f[n];
}
function calculateSumOfSquares(n) {
return fib(n) * fib(n + 1);
}
let n = 6;
document.write( "Sum of Squares of Fibonacci numbers is : "
+ calculateSumOfSquares(n));
</script>
|
Output:
Sum of Squares of Fibonacci numbers is : 104
Time Complexity: O(logn)
Auxiliary Space: O(n)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...