Monday, November 18, 2024
Google search engine
HomeLanguagesDynamic ProgrammingFind the sum of first N odd Fibonacci numbers

Find the sum of first N odd Fibonacci numbers

Given a number, N. Find the sum of first N odd Fibonacci numbers.

Note: The answer can be very large so print the answer modulo 10^9+7.

Examples:  

Input : N = 3
Output : 5
Explanation : 1 + 1 + 3

Input : 6
Output : 44
Explanation : 1 + 1 + 3 + 5 + 13 + 21

Approach: Odd Fibonacci series is:  

1, 1, 3, 5, 13, 21, 55, 89......

Prefix sum of odd Fibonacci series is:  

1, 2, 5, 10, 23, 44, 99, 188.....

The formula for the sum of first N odd Fibonacci numbers is: 

a(n) = a(n-1) + 4*a(n-2) - 4*a(n-3) + a(n-4) - a(n-5) for n>5  

Below is the implementation of the above approach: 

C++




// CPP program to Find the sum of
// first N odd Fibonacci numbers
#include <bits/stdc++.h>
using namespace std;
 
#define mod 1000000007
 
// Function to calculate sum of first
// N odd Fibonacci numbers
long long sumOddFibonacci(int n)
{
    long long Sum[n + 1];
 
    // base values
    Sum[0] = 0;
    Sum[1] = 1;
    Sum[2] = 2;
    Sum[3] = 5;
    Sum[4] = 10;
    Sum[5] = 23;
 
    for (int i = 6; i <= n; i++) {
        Sum[i] = ((Sum[i - 1] + (4 * Sum[i - 2]) % mod -
                  (4 * Sum[i - 3]) % mod + mod) % mod +
                  (Sum[i - 4] - Sum[i - 5] + mod) % mod) % mod;
    }
 
    return Sum[n];
}
 
// Driver code
int main()
{
    long long n = 6;
 
    cout << sumOddFibonacci(n);
 
    return 0;
}


Java




// Java  program to Find the sum of
// first N odd Fibonacci numbers
 
import java.io.*;
 
class GFG {
    static int mod =1000000007;
 
// Function to calculate sum of first
// N odd Fibonacci numbers
static  int sumOddFibonacci(int n)
{
     int Sum[]=new int[n + 1];
 
    // base values
    Sum[0] = 0;
    Sum[1] = 1;
    Sum[2] = 2;
    Sum[3] = 5;
    Sum[4] = 10;
    Sum[5] = 23;
 
    for (int i = 6; i <= n; i++) {
        Sum[i] = ((Sum[i - 1] + (4 * Sum[i - 2]) % mod -
                (4 * Sum[i - 3]) % mod + mod) % mod +
                (Sum[i - 4] - Sum[i - 5] + mod) % mod) % mod;
    }
 
    return Sum[n];
}
 
// Driver code
     
    public static void main (String[] args) {
 
    int n = 6;
    System.out.println(sumOddFibonacci(n));
    }
//This Code is Contributed by Sachin   
}


Python3




# Python3 program to Find the sum of
# first N odd Fibonacci numbers
mod = 1000000007 ;
 
# Function to calculate sum of
# first N odd Fibonacci numbers
def sumOddFibonacci(n):
 
    Sum=[0]*(n + 1);
 
    # base values
    Sum[0] = 0;
    Sum[1] = 1;
    Sum[2] = 2;
    Sum[3] = 5;
    Sum[4] = 10;
    Sum[5] = 23;
 
    for i in range(6,n+1):
        Sum[i] = ((Sum[i - 1] +
                    (4 * Sum[i - 2]) % mod -
                    (4 * Sum[i - 3]) % mod +
                    mod) % mod + (Sum[i - 4] -
                    Sum[i - 5] + mod) % mod) % mod;
 
    return Sum[n];
 
# Driver code
n = 6;
print(sumOddFibonacci(n));
 
# This code is contributed by mits


C#




// C#  program to Find the sum of
// first N odd Fibonacci numbers
 
using System;
 
public class GFG{
 
static int mod =1000000007;
// Function to calculate sum of first
// N odd Fibonacci numbers
static int sumOddFibonacci(int n)
{
    int []Sum=new int[n + 1];
 
    // base values
    Sum[0] = 0;
    Sum[1] = 1;
    Sum[2] = 2;
    Sum[3] = 5;
    Sum[4] = 10;
    Sum[5] = 23;
 
    for (int i = 6; i <= n; i++) {
        Sum[i] = ((Sum[i - 1] + (4 * Sum[i - 2]) % mod -
                (4 * Sum[i - 3]) % mod + mod) % mod +
                (Sum[i - 4] - Sum[i - 5] + mod) % mod) % mod;
    }
 
    return Sum[n];
}
 
// Driver code
     
     
     
    static public void Main (){
        int n = 6;
    Console.WriteLine(sumOddFibonacci(n));
    }
//This Code is Contributed by Sachin    
}


PHP




<?php
// PHP program to Find the sum of
// first N odd Fibonacci numbers
$mod = 1000000007 ;
 
// Function to calculate sum of
// first N odd Fibonacci numbers
function sumOddFibonacci($n)
{
    global $mod;
    $Sum[$n + 1] = array();
 
    // base values
    $Sum[0] = 0;
    $Sum[1] = 1;
    $Sum[2] = 2;
    $Sum[3] = 5;
    $Sum[4] = 10;
    $Sum[5] = 23;
 
    for ($i = 6; $i <= $n; $i++)
    {
        $Sum[$i] = (($Sum[$i - 1] +
                    (4 * $Sum[$i - 2]) % $mod -
                    (4 * $Sum[$i - 3]) % $mod +
                    $mod) % $mod + ($Sum[$i - 4] -
                    $Sum[$i - 5] + $mod) % $mod) % $mod;
    }
 
    return $Sum[$n];
}
 
// Driver code
$n = 6;
echo sumOddFibonacci($n);
 
// This code is contributed by jit_t
?>


Javascript




<script>
// javascript  program to Find the sum of
// first N odd Fibonacci numbers
 
    var mod = 1000000007;
 
    // Function to calculate sum of first
    // N odd Fibonacci numbers
    function sumOddFibonacci(n) {
        var Sum = Array(n + 1).fill(0);
 
        // base values
        Sum[0] = 0;
        Sum[1] = 1;
        Sum[2] = 2;
        Sum[3] = 5;
        Sum[4] = 10;
        Sum[5] = 23;
 
        for (i = 6; i <= n; i++) {
            Sum[i] = ((Sum[i - 1] + (4 * Sum[i - 2]) % mod - (4 * Sum[i - 3]) % mod + mod) % mod
                    + (Sum[i - 4] - Sum[i - 5] + mod) % mod) % mod;
        }
 
        return Sum[n];
    }
 
    // Driver code
 
     
 
        var n = 6;
        document.write(sumOddFibonacci(n));
 
// This code contributed by umadevi9616
</script>


Output: 

44

 

Time Complexity: O(n), Auxiliary Space: O(n)

Efficient approach : Space optimization O(1)

In previous approach we the current value Sum[i] is only depend upon the previous 6 values i.e. Sum[i-1], Sum[i-2], …. Sum[i-5]  So to optimize the space we can keep track of previous and current values by the help of three variables Sum0, Sum1 , …. ,  Sum5 which will reduce the space complexity from O(N) to O(1).  

Implementation Steps:

  • Create variables Sum0, Sum1 , …. ,  Sum5 to keep track of previous values of Sum[].
  • Initialize base case.
  • Create a variable Sum to store current value.
  • Iterate over subproblem using loop and update Sum.
  • After every iteration update Sum0, Sum1 , …. ,  Sum5 for further iterations.
  • At last return Sum.

Implementation:

C++




// CPP program to Find the sum of
// first N odd Fibonacci numbers
#include <bits/stdc++.h>
using namespace std;
 
#define mod 1000000007
 
// Function to calculate sum of first
// N odd Fibonacci numbers
long long sumOddFibonacci(int n)
{
//     long long Sum[n + 1];
 
    // base values
    int Sum0 = 0;
    int Sum1 = 1;
    int Sum2 = 2;
    int Sum3 = 5;
    int Sum4 = 10;
    int Sum5 = 23;
     
    int Sum;
 
    for (int i = 6; i <= n; i++) {
        Sum = ((Sum5 + (4 * Sum4) % mod -
                (4 * Sum3) % mod + mod) % mod +
                (Sum2 - Sum1 + mod) % mod) % mod;
       
            //assigning values for further iteration
            Sum0 = Sum1;
            Sum1 = Sum2;
            Sum2 = Sum3;
            Sum3 = Sum4;
            Sum4 = Sum5;
            Sum5 = Sum;
    }
 
      // return final answer
    return Sum;
}
 
// Driver code
int main()
{
    long long n = 6;
     
      // function call
    cout << sumOddFibonacci(n);
 
    return 0;
}


Python




MOD = 1000000007
 
# Function to calculate sum of first
# N odd Fibonacci numbers
def sumOddFibonacci(n):
    # base values
    Sum0 = 0
    Sum1 = 1
    Sum2 = 2
    Sum3 = 5
    Sum4 = 10
    Sum5 = 23
 
    for i in range(6, n+1):
        Sum = ((Sum5 + (4 * Sum4) % MOD -
                (4 * Sum3) % MOD + MOD) % MOD +
                (Sum2 - Sum1 + MOD) % MOD) % MOD
 
        # assigning values for further iteration
        Sum0 = Sum1
        Sum1 = Sum2
        Sum2 = Sum3
        Sum3 = Sum4
        Sum4 = Sum5
        Sum5 = Sum
 
    # return final answer
    return Sum
 
# Driver code
n = 6
 
# function call
print(sumOddFibonacci(n))


Java




import java.util.*;
 
public class Main {
   
    // Function to calculate sum of first
    // N odd Fibonacci numbers
    static long sumOddFibonacci(int n)
    {
        int mod = 1000000007;
 
        // base values
        int Sum0 = 0;
        int Sum1 = 1;
        int Sum2 = 2;
        int Sum3 = 5;
        int Sum4 = 10;
        int Sum5 = 23;
 
        int Sum;
 
        for (int i = 6; i <= n; i++) {
            Sum = ((Sum5 + (4 * Sum4) % mod
                    - (4 * Sum3) % mod + mod)
                       % mod
                   + (Sum2 - Sum1 + mod) % mod)
                  % mod;
 
            // assigning values for further iteration
            Sum0 = Sum1;
            Sum1 = Sum2;
            Sum2 = Sum3;
            Sum3 = Sum4;
            Sum4 = Sum5;
            Sum5 = Sum;
        }
 
        // return final answer
        return Sum5;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int N = 6;
        System.out.println(sumOddFibonacci(N));
    }
}


Output:

44

Time Complexity: O(n)

Auxiliary Space: O(1)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments