logo

N-tais pāra Fibonači skaitlis

Ņemot vērā vērtību n, atrodiet n-to pāra vērtību Fibonači skaitlis .

Piemēri:  

Ievade n = 3
Izvade 34
Paskaidrojums Pirmie 3 pāra Fibonači skaitļi ir 0 2 8 34 144, bet trešais ir 34.



Ievade n = 4
Izvade 144
Paskaidrojums Pirmie 4 pāra Fibonači skaitļi ir 0 2 8 34 144, bet ceturtais ir 144.

[Naiva pieeja] Pārbaudiet katru Fibonači numuru pa vienam

Mēs ģenerēt visus Fibonači skaitļus un pārbaudiet katru numuru pa vienam, vai tas ir vai nav

[Efektīva pieeja] Tiešās formulas izmantošana — O(n) laiks un O(1) telpa

Pāra skaitļa Fibonači secība ir 0 2 8 34 144 610 2584... No šīs secības mēs varam saprast, ka katrs trešais skaitlis pēc kārtas ir pāra un secība seko šādai rekursīvai formulai. 

Pat Fibonači secības atkārtošanās ir:

Eefn = 4fn-1 + Efn-2

Kā darbojas iepriekš minētā formula?  
Apskatīsim oriģinālo Fibonači formulu un uzrakstīsim to Fn-3 un Fn-6 formā, jo katrs trešais Fibonači skaitlis ir pāra skaitlis. 

Fn = Fn-1 + Fn-2 [Abu terminu izvēršana]

= Fn-2 + Fn-3 + Fn-3 + Fn-4

= Fn-2 + 2Fn-3 + Fn-4 [Izvērš pirmo terminu]

= Fn-3 + Fn-4 + 2Fn-3 + Fn-4

= 3Fn-3 + 2Fn-4 [Izvēršot vienu Fn-4]

= 3Fn-3 + Fn-4 + Fn-5 + Fn-6 [Fn-4 un Fn-5 ķemmēšana]

= 4Fn-3 + Fn-6

Tā kā katrs trešais Fibonači skaitlis ir pāra Tātad, ja Fn ir

pat tad Fn-3 ir pāra un Fn-6 arī ir pāra. Ļaujiet Fn būt

x-to pāra elementu un atzīmējiet to kā EFx.

java aizstāj rakstzīmi virknē

Ja Fn ir EFx, tad Fn-3 ir iepriekšējais pāra skaitlis, t.i., EFx-1

un Fn-6 ir pirms EFx-1, t.i., EFx-2

Tātad Fn = 4Fn-3 + Fn-6

kas nozīmē

EFx = 4EFx-1 + EFx-2

Zemāk ir vienkārša idejas īstenošana

C++
#include    using namespace std; // Optimized function to calculate the nth // even Fibonacci number int nthEvenFibonacci(int n) {    // Base case: the first even Fibonacci number is 2  if (n == 1) return 2;  // Start with the first two even Fibonacci numbers  int prev = 0; // F(0)  int curr = 2; // F(3)  // We need to find the nth even Fibonacci number  for (int i = 2; i <= n; i++) {    // Next even Fibonacci number is 4 times  // the previous even Fibonacci number plus   // the one before that  int nextEvenFib = 4 * curr + prev;  prev = curr;  curr = nextEvenFib;  }  return curr; } int main() {  int n = 2;   int result = nthEvenFibonacci(n);   cout << result << endl;   return 0; } 
Java
public class GfG {  // Function to calculate the nth even Fibonacci  // number using dynamic programming  public static int nthEvenFibonacci(int n) {    // Base case: the first even  // Fibonacci number is 2  if (n == 1) return 2;  // Start with the first two Fibonacci   // numbers (even ones)  int prev = 0; // F(0)  int curr = 2; // F(3)  // We need to find the nth even Fibonacci number  for (int i = 2; i <= n; i++) {    // Next even Fibonacci number is 4   // times the previous even Fibonacci   // number plus the one before that  int nextEvenFib = 4 * curr + prev;  prev = curr;  curr = nextEvenFib;  }  return curr;  }  public static void main(String[] args) {  int n = 2;  int result = nthEvenFibonacci(n);  System.out.println(result);   } } 
Python
# Function to calculate the nth even  # Fibonacci number using dynamic programming def nthEvenFibonacci(n): # Base case: the first even Fibonacci number is 2 if n == 1: return 2 # Start with the first two Fibonacci numbers (even ones) prev = 0 # F(0) curr = 2 # F(3) # We need to find the nth even Fibonacci number for i in range(2 n + 1): # Next even Fibonacci number is 4 times the  # previous even Fibonacci number plus the # one before that next_even_fib = 4 * curr + prev prev = curr curr = next_even_fib return curr # Driver code if __name__ == '__main__': n = 2 # Setting n to 2 result = nthEvenFibonacci(n) print(result) 
C#
using System; class GfG {  // Function to calculate the nth even Fibonacci   // number using dynamic programming  public int NthEvenFibonacci(int n)  {  // Base case: the first even Fibonacci number is 2  if (n == 1)  return 2;  // Start with the first two Fibonacci numbers (even ones)  int prev = 0; // F(0)  int curr = 2; // F(3)  // We need to find the nth even Fibonacci number  for (int i = 2; i <= n; i++)  {  // Next even Fibonacci number is 4 times the   // previous even Fibonacci number plus the   // one before that  int nextEvenFib = 4 * curr + prev;  prev = curr;  curr = nextEvenFib;  }  return curr;  }  static void Main()  {  GfG gfg = new GfG();  int n = 2;  int result = gfg.NthEvenFibonacci(n);  Console.WriteLine(result); // Output: The nth even Fibonacci number  } } 
JavaScript
// Function to calculate the nth even Fibonacci number using dynamic programming function nthEvenFibonacci(n) {  // Base case: the first even Fibonacci number is 2  if (n === 1) return 2;  // Start with the first two Fibonacci numbers (even ones)  let prev = 0; // F(0)  let curr = 2; // F(3)  // We need to find the nth even Fibonacci number  for (let i = 2; i <= n; i++) {    // Next even Fibonacci number is 4 times   // the previous even Fibonacci number plus   // the one before that  let nextEvenFib = 4 * curr + prev;  prev = curr;  curr = nextEvenFib;  }  return curr; } // Example usage: const n = 2; // Setting n to 2 const result = nthEvenFibonacci(n);  console.log(result);  

Izvade
8