📜  最多 N 项的偶数索引处的斐波那契数的总和

📅  最后修改于: 2021-09-17 07:13:24             🧑  作者: Mango

给定一个正整数 N,任务是找到 F 2 + F 4 + F 6 +………+ F 2n最多 N 项的值,其中 F i表示第 i 个斐波那契数。
斐波那契数是以下整数序列中的数字。

例子:

方法 1:此方法包括通过找到所有 Fibonacci 数直到 2n 并将唯一的偶数索引相加来直接解决问题。但这将需要 O(n) 的时间复杂度。
下面是上述方法的实现:

C++
// C++ Program to find  sum
// of even-indiced Fibonacci numbers
#include 
using namespace std;
 
// Computes value of first fibonacci numbers
// and stores the even-indexed sum
int calculateEvenSum(int n)
{
    if (n <= 0)
        return 0;
 
    int fibo[2 * n + 1];
    fibo[0] = 0, fibo[1] = 1;
 
    // Initialize result
    int sum = 0;
 
    // Add remaining terms
    for (int i = 2; i <= 2 * n; i++) {
        fibo[i] = fibo[i - 1] + fibo[i - 2];
 
        // For even indices
        if (i % 2 == 0)
            sum += fibo[i];
    }
 
    // Return the alternting sum
    return sum;
}
 
// Driver program to test above function
int main()
{
 
    // Get n
    int n = 8;
 
    // Find the even-indiced sum
    cout << "Even indexed Fibonacci Sum upto "
         << n << " terms: "
         << calculateEvenSum(n) << endl;
 
    return 0;
}


Java
// Java Program to find sum
// of even-indiced Fibonacci numbers
 
import java.io.*;
 
class GFG {
 
 
// Computes value of first fibonacci numbers
// and stores the even-indexed sum
static int calculateEvenSum(int n)
{
    if (n <= 0)
        return 0;
 
    int fibo[] = new int[2 * n + 1];
    fibo[0] = 0; fibo[1] = 1;
 
    // Initialize result
    int sum = 0;
 
    // Add remaining terms
    for (int i = 2; i <= 2 * n; i++) {
        fibo[i] = fibo[i - 1] + fibo[i - 2];
 
        // For even indices
        if (i % 2 == 0)
            sum += fibo[i];
    }
 
    // Return the alternting sum
    return sum;
}
 
// Driver program
    public static void main (String[] args) {
            // Get n
    int n = 8;
 
    // Find the even-indiced sum
    System.out.println("Even indexed Fibonacci Sum upto "
        + n + " terms: "+
        + calculateEvenSum(n));
 
    }
}
 
// This code is contributed
// by shs


Python 3
# Python3 Program to find sum
# of even-indiced Fibonacci numbers
 
# Computes value of first fibonacci
# numbers and stores the even-indexed sum
def calculateEvenSum(n) :
 
    if n <= 0 :
        return 0
 
    fibo = [0] * (2 * n + 1)
    fibo[0] , fibo[1] = 0 , 1
 
    # Initialize result
    sum = 0
 
    # Add remaining terms
    for i in range(2, 2 * n + 1) :
 
        fibo[i] = fibo[i - 1] + fibo[i - 2]
 
        # For even indices
        if i % 2 == 0 :
            sum += fibo[i]
 
    # Return the alternting sum
    return sum
 
# Driver code
if __name__ == "__main__" :
 
    # Get n
    n = 8
 
    # Find the even-indiced sum
    print("Even indexed Fibonacci Sum upto",
           n, "terms:", calculateEvenSum(n))
 
# This code is contributed
# by ANKITRAI1


C#
// C# Program to find sum of
// even-indiced Fibonacci numbers
using System;
 
class GFG
{
     
// Computes value of first fibonacci
// numbers and stores the even-indexed sum
static int calculateEvenSum(int n)
{
    if (n <= 0)
        return 0;
 
    int []fibo = new int[2 * n + 1];
    fibo[0] = 0; fibo[1] = 1;
 
    // Initialize result
    int sum = 0;
 
    // Add remaining terms
    for (int i = 2; i <= 2 * n; i++)
    {
        fibo[i] = fibo[i - 1] +
                  fibo[i - 2];
 
        // For even indices
        if (i % 2 == 0)
            sum += fibo[i];
    }
 
    // Return the alternting sum
    return sum;
}
 
// Driver Code
static public void Main ()
{
    // Get n
    int n = 8;
     
    // Find the even-indiced sum
    Console.WriteLine("Even indexed Fibonacci Sum upto " +
                    n + " terms: " + calculateEvenSum(n));
}
}
 
// This code is contributed
// by Sach_Code


PHP


Javascript


C++
// C++ Program to find even indexed Fibonacci Sum in
// O(Log n) time.
 
#include 
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];
}
 
// Computes value of even-indexed  Fibonacci Sum
int calculateEvenSum(int n)
{
    return (fib(2 * n + 1) - 1);
}
 
// Driver program to test above function
int main()
{
    // Get n
    int n = 8;
 
    // Find the alternating sum
    cout << "Even indexed Fibonacci Sum upto "
         << n << " terms: "
         << calculateEvenSum(n) << endl;
 
    return 0;
}


Java
// Java Program to find even indexed Fibonacci Sum in
// O(Log n) time.
 
class GFG {
 
    static int MAX = 1000;
 
   // Create an array for memoization
    static int f[] = new int[MAX];
 
// Returns n'th Fibonacci number
// using table f[]
    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] == 1) {
            return f[n];
        }
 
        int k = (n % 2 == 1) ? (n + 1) / 2 : n / 2;
 
        // Applying above formula [Note value n&1 is 1
        // if n is odd, else 0].
        f[n] = (n % 2 == 1) ? (fib(k) * fib(k) + fib(k - 1) * fib(k - 1))
                : (2 * fib(k - 1) + fib(k)) * fib(k);
 
        return f[n];
    }
 
// Computes value of even-indexed Fibonacci Sum
    static int calculateEvenSum(int n) {
        return (fib(2 * n + 1) - 1);
    }
 
// Driver program to test above function
    public static void main(String[] args) {
        // Get n
        int n = 8;
 
        // Find the alternating sum
        System.out.println("Even indexed Fibonacci Sum upto "
                + n + " terms: "
                + calculateEvenSum(n));
    }
}
// This code is contributed by Rajput-Ji


Python3
# Python3 Program to find even indexed
# Fibonacci Sum in O(Log n) time.
MAX = 1000;
 
# Create an array for memoization
f = [0] * 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):
        f[n] = 1;
        return f[n];
 
    # If fib(n) is already computed
    if (f[n]):
        return f[n];
 
    k = (n + 1) // 2 if (n % 2 == 1) else n // 2;
 
    # Applying above formula [Note value n&1 is 1
    # if n is odd, else 0].
    f[n] = (fib(k) * fib(k) + fib(k - 1) * fib(k - 1)) \
    if (n % 2 == 1) else (2 * fib(k - 1) + fib(k)) * fib(k);
 
    return f[n];
 
# Computes value of even-indexed Fibonacci Sum
def calculateEvenSum(n):
    return (fib(2 * n + 1) - 1);
 
# Driver Code
if __name__ == '__main__':
     
    # Get n
    n = 8;
 
    # Find the alternating sum
    print("Even indexed Fibonacci Sum upto",
          n, "terms:", calculateEvenSum(n));
 
# This code is contributed by PrinciRaj1992


C#
// C# Program to find even indexed Fibonacci Sum in
// O(Log n) time.
using System;
 
class GFG
{
 
    static int MAX = 1000;
 
    // Create an array for memoization
    static int []f = new int[MAX];
 
    // Returns n'th Fibonacci number
    // using table f[]
    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] == 1)
        {
            return f[n];
        }
 
        int k = (n % 2 == 1) ? (n + 1) / 2 : n / 2;
 
        // Applying above formula [Note value n&1 is 1
        // if n is odd, else 0].
        f[n] = (n % 2 == 1) ? (fib(k) * fib(k) +
                                fib(k - 1) * fib(k - 1))
                : (2 * fib(k - 1) + fib(k)) * fib(k);
 
        return f[n];
    }
 
    // Computes value of even-indexed Fibonacci Sum
    static int calculateEvenSum(int n)
    {
        return (fib(2 * n + 1) - 1);
    }
 
    // Driver code
    public static void Main()
    {
        // Get n
        int n = 8;
 
        // Find the alternating sum
        Console.WriteLine("Even indexed Fibonacci Sum upto "
                + n + " terms: "
                + calculateEvenSum(n));
    }
}
 
//This code is contributed by 29AjayKumar


Javascript


输出:
Even indexed Fibonacci Sum upto 8 terms: 1596

方法 2:

因此,为了找到所需的总和,任务是仅找到需要 O(log n) 时间的 F 2n+1 。(请参阅本文中的方法 5 或方法 6。
下面是上述方法的实现:

C++

// C++ Program to find even indexed Fibonacci Sum in
// O(Log n) time.
 
#include 
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];
}
 
// Computes value of even-indexed  Fibonacci Sum
int calculateEvenSum(int n)
{
    return (fib(2 * n + 1) - 1);
}
 
// Driver program to test above function
int main()
{
    // Get n
    int n = 8;
 
    // Find the alternating sum
    cout << "Even indexed Fibonacci Sum upto "
         << n << " terms: "
         << calculateEvenSum(n) << endl;
 
    return 0;
}

Java

// Java Program to find even indexed Fibonacci Sum in
// O(Log n) time.
 
class GFG {
 
    static int MAX = 1000;
 
   // Create an array for memoization
    static int f[] = new int[MAX];
 
// Returns n'th Fibonacci number
// using table f[]
    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] == 1) {
            return f[n];
        }
 
        int k = (n % 2 == 1) ? (n + 1) / 2 : n / 2;
 
        // Applying above formula [Note value n&1 is 1
        // if n is odd, else 0].
        f[n] = (n % 2 == 1) ? (fib(k) * fib(k) + fib(k - 1) * fib(k - 1))
                : (2 * fib(k - 1) + fib(k)) * fib(k);
 
        return f[n];
    }
 
// Computes value of even-indexed Fibonacci Sum
    static int calculateEvenSum(int n) {
        return (fib(2 * n + 1) - 1);
    }
 
// Driver program to test above function
    public static void main(String[] args) {
        // Get n
        int n = 8;
 
        // Find the alternating sum
        System.out.println("Even indexed Fibonacci Sum upto "
                + n + " terms: "
                + calculateEvenSum(n));
    }
}
// This code is contributed by Rajput-Ji

蟒蛇3

# Python3 Program to find even indexed
# Fibonacci Sum in O(Log n) time.
MAX = 1000;
 
# Create an array for memoization
f = [0] * 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):
        f[n] = 1;
        return f[n];
 
    # If fib(n) is already computed
    if (f[n]):
        return f[n];
 
    k = (n + 1) // 2 if (n % 2 == 1) else n // 2;
 
    # Applying above formula [Note value n&1 is 1
    # if n is odd, else 0].
    f[n] = (fib(k) * fib(k) + fib(k - 1) * fib(k - 1)) \
    if (n % 2 == 1) else (2 * fib(k - 1) + fib(k)) * fib(k);
 
    return f[n];
 
# Computes value of even-indexed Fibonacci Sum
def calculateEvenSum(n):
    return (fib(2 * n + 1) - 1);
 
# Driver Code
if __name__ == '__main__':
     
    # Get n
    n = 8;
 
    # Find the alternating sum
    print("Even indexed Fibonacci Sum upto",
          n, "terms:", calculateEvenSum(n));
 
# This code is contributed by PrinciRaj1992

C#

// C# Program to find even indexed Fibonacci Sum in
// O(Log n) time.
using System;
 
class GFG
{
 
    static int MAX = 1000;
 
    // Create an array for memoization
    static int []f = new int[MAX];
 
    // Returns n'th Fibonacci number
    // using table f[]
    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] == 1)
        {
            return f[n];
        }
 
        int k = (n % 2 == 1) ? (n + 1) / 2 : n / 2;
 
        // Applying above formula [Note value n&1 is 1
        // if n is odd, else 0].
        f[n] = (n % 2 == 1) ? (fib(k) * fib(k) +
                                fib(k - 1) * fib(k - 1))
                : (2 * fib(k - 1) + fib(k)) * fib(k);
 
        return f[n];
    }
 
    // Computes value of even-indexed Fibonacci Sum
    static int calculateEvenSum(int n)
    {
        return (fib(2 * n + 1) - 1);
    }
 
    // Driver code
    public static void Main()
    {
        // Get n
        int n = 8;
 
        // Find the alternating sum
        Console.WriteLine("Even indexed Fibonacci Sum upto "
                + n + " terms: "
                + calculateEvenSum(n));
    }
}
 
//This code is contributed by 29AjayKumar

Javascript


输出:
Even indexed Fibonacci Sum upto 8 terms: 1596