Sum of squares of Fibonacci numbers
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++
// C++ Program to find sum of // squares of Fibonacci numbers #include <bits/stdc++.h> using namespace std; // Function to calculate sum of // squares of Fibonacci numbers int calculateSquareSum( int n) { if (n <= 0) return 0; int fibo[n + 1]; fibo[0] = 0, fibo[1] = 1; // Initialize result int sum = (fibo[0] * fibo[0]) + (fibo[1] * fibo[1]); // Add remaining terms for ( int i = 2; i <= n; i++) { fibo[i] = fibo[i - 1] + fibo[i - 2]; sum += (fibo[i] * fibo[i]); } return sum; } // Driver program to test above function int main() { int n = 6; cout << "Sum of squares of Fibonacci numbers is : " << calculateSquareSum(n) << endl; return 0; } |
Java
// Java Program to find sum of // squares of Fibonacci numbers public class Improve { // Function to calculate sum of // squares of Fibonacci numbers static int calculateSquareSum( int n) { if (n <= 0 ) return 0 ; int fibo[] = new int [n+ 1 ]; fibo[ 0 ] = 0 ; fibo[ 1 ] = 1 ; // Initialize result int sum = (fibo[ 0 ] * fibo[ 0 ]) + (fibo[ 1 ] * fibo[ 1 ]); // Add remaining terms for ( int i = 2 ; i <= n; i++) { fibo[i] = fibo[i - 1 ] + fibo[i - 2 ]; sum += (fibo[i] * fibo[i]); } return sum; } // Driver code public static void main(String args[]) { int n = 6 ; System.out.println( "Sum of squares of Fibonacci numbers is : " + calculateSquareSum(n)); } // This Code is contributed by ANKITRAI1 } |
Python3
# Python3 Program to find sum of # squares of Fibonacci numbers # Function to calculate sum of # squares of Fibonacci numbers def calculateSquareSum(n): fibo = [ 0 ] * (n + 1 ); if (n < = 0 ): return 0 ; fibo[ 0 ] = 0 ; fibo[ 1 ] = 1 ; # Initialize result sum = ((fibo[ 0 ] * fibo[ 0 ]) + (fibo[ 1 ] * fibo[ 1 ])); # Add remaining terms for i in range ( 2 , n + 1 ): fibo[i] = (fibo[i - 1 ] + fibo[i - 2 ]); sum + = (fibo[i] * fibo[i]); return sum ; # Driver Code n = 6 ; print ( "Sum of squares of Fibonacci numbers is :" , calculateSquareSum(n)); # This Code is contributed by mits |
C#
// C# Program to find sum of // squares of Fibonacci numbers using System; public class Improve { // Function to calculate sum of // squares of Fibonacci numbers static int calculateSquareSum( int n) { if (n <= 0) return 0; int [] fibo = new int [n+1]; fibo[0] = 0 ; fibo[1] = 1 ; // Initialize result int sum = (fibo[0] * fibo[0]) + (fibo[1] * fibo[1]); // Add remaining terms for ( int i = 2; i <= n; i++) { fibo[i] = fibo[i - 1] + fibo[i - 2]; sum += (fibo[i] * fibo[i]); } return sum; } // Driver code public static void Main() { int n = 6; Console.Write( "Sum of squares of Fibonacci numbers is : " + calculateSquareSum(n)); } } |
PHP
<?php // PHP Program to find sum of // squares of Fibonacci numbers // Function to calculate sum of // squares of Fibonacci numbers function calculateSquareSum( $n ) { if ( $n <= 0) return 0; $fibo [0] = 0; $fibo [1] = 1; // Initialize result $sum = ( $fibo [0] * $fibo [0]) + ( $fibo [1] * $fibo [1]); // Add remaining terms for ( $i = 2; $i <= $n ; $i ++) { $fibo [ $i ] = $fibo [ $i - 1] + $fibo [ $i - 2]; $sum += ( $fibo [ $i ] * $fibo [ $i ]); } return $sum ; } // Driver Code $n = 6; echo "Sum of squares of Fibonacci numbers is : " , calculateSquareSum( $n ); // This Code is contributed by ajit ?> |
Javascript
<script> // Javascript Program to find sum of // squares of Fibonacci numbers // Function to calculate sum of // squares of Fibonacci numbers function calculateSquareSum(n) { if (n <= 0) return 0; var fibo = Array(n + 1).fill(0); fibo[0] = 0; fibo[1] = 1; // Initialize result var sum = (fibo[0] * fibo[0]) + (fibo[1] * fibo[1]); // Add remaining terms for (i = 2; i <= n; i++) { fibo[i] = fibo[i - 1] + fibo[i - 2]; sum += (fibo[i] * fibo[i]); } return sum; } // Driver code var n = 6; document.write( "Sum of squares of Fibonacci numbers is :" + calculateSquareSum(n) ); // This code contributed by gauravrajput1 </script> |
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++
// C++ Program to find sum of squares of // Fibonacci numbers in O(Log n) time. #include <bits/stdc++.h> using namespace std; const int MAX = 1000; // Create an array for memoization int f[MAX] = { 0 }; // Returns n'th Fibonacci number using table f[] int fib( int n) { // Base cases if (n == 0) return 0; if (n == 1 || n == 2) return (f[n] = 1); // If fib(n) is already computed if (f[n]) return f[n]; int k = (n & 1) ? (n + 1) / 2 : n / 2; // Applying above formula [Note value n&1 is 1 // if n is odd, else 0]. 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 to calculate sum of // squares of Fibonacci numbers int calculateSumOfSquares( int n) { return fib(n) * fib(n + 1); } // Driver Code int main() { int n = 6; cout << "Sum of Squares of Fibonacci numbers is : " << calculateSumOfSquares(n) << endl; return 0; } |
Java
// Java Program to find sum of squares of // Fibonacci numbers in O(Log n) time. class gfg { static int [] f = new int [ 1000 ]; // Create an array for memoization // Returns n'th Fibonacci number using table f[] public static int fib( int n) { // Base cases if (n == 0 ) { return 0 ; } if (n == 1 || n == 2 ) { return (f[n] = 1 ); } // If fib(n) is already computed if (f[n] > 0 ) { return f[n]; } int k = ((n & 1 ) > 0 ) ? (n + 1 ) / 2 : n / 2 ; // Applying above formula [Note value n&1 is 1 // if n is odd, else 0]. 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 to calculate sum of // squares of Fibonacci numbers public static int calculateSumOfSquares( int n) { return fib(n) * fib(n + 1 ); } } // Driver Code 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)); } } // This code is contributed by PrinciRaj1992 |
Python3
# Python3 program to find sum of squares # of Fibonacci numbers in O(Log n) time. MAX = 1000 # Create an array for memoization f = [ 0 for i in range ( MAX )] # Returns n'th Fibonacci number using # table f[] def fib(n): # Base cases if n = = 0 : return 0 if n = = 1 or n = = 2 : return 1 # If fib(n) is already computed if f[n]: return f[n] if n & 1 : k = (n + 1 ) / / 2 else : k = n / / 2 # Applying above formula[Note value # n & 1 is 1 if n is odd, else 0]. 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] # Function to calculate sum of # squares of Fibonacci numbers def calculateSumOfSquares(n): return fib(n) * fib(n + 1 ) # Driver Code n = 6 print ( "Sum of Squares of " "Fibonacci numbers is :" , calculateSumOfSquares(n)) # This code is contributed by Gaurav Kumar Tailor |
C#
// C# Program to find sum of squares of // Fibonacci numbers in O(Log n) time. using System; class gfg { int []f = new int [1000]; // Create an array for memoization // Returns n'th Fibonacci number using table f[] public int fib( int n) { // Base cases if (n == 0) return 0; if (n == 1 || n == 2) return (f[n] = 1); // If fib(n) is already computed if (f[n]>0) return f[n]; int k = ((n & 1)>0) ? (n + 1) / 2 : n / 2; // Applying above formula [Note value n&1 is 1 // if n is odd, else 0]. 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 to calculate sum of // squares of Fibonacci numbers public int calculateSumOfSquares( int n) { return fib(n) * fib(n + 1); } } // Driver Code 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 // PHP Program to find sum of squares of // Fibonacci numbers in O(Log n) time. $MAX = 1000; global $f ; // Create an array for memoization $f = array_fill (0, $MAX , 0); // Returns n'th Fibonacci number // using table f[] function fib( $n ) { // Base cases if ( $n == 0) return 0; if ( $n == 1 || $n == 2) return ( $f [ $n ] = 1); $k = ( $n & 1) ? ( $n + 1) / 2 : $n / 2; // Applying above formula [Note value // n&1 is 1 if n is odd, else 0]. $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 to calculate sum of // squares of Fibonacci numbers function calculateSumOfSquares( $n ) { return fib( $n ) * fib( $n + 1); } // Driver Code $n = 6; echo "Sum of Squares of Fibonacci numbers is : " ; echo calculateSumOfSquares( $n ); // This code is contributed by Rajput-Ji ?> |
Javascript
<script> // Javascript Program to find sum of squares of // Fibonacci numbers in O(Log n) time. // Create an array for memoization let f = new Array(1000); f.fill(0); // Returns n'th Fibonacci number using table f[] function fib(n) { // Base cases if (n == 0) { return 0; } if (n == 1 || n == 2) { return (f[n] = 1); } // If fib(n) is already computed if (f[n] > 0) { return f[n]; } let k = ((n & 1) > 0) ? (n + 1) / 2 : n / 2; // Applying above formula [Note value n&1 is 1 // if n is odd, else 0]. 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 to calculate sum of // squares of Fibonacci numbers function calculateSumOfSquares(n) { return fib(n) * fib(n + 1); } let n = 6; document.write( "Sum of Squares of Fibonacci numbers is : " + calculateSumOfSquares(n)); </script> |
Sum of Squares of Fibonacci numbers is : 104
Time Complexity: O(logn)
Auxiliary Space: O(n)
Please Login to comment...