检查斐波那契类数列中第 n 项是奇数还是偶数


我们在这个问题中的任务是检查斐波那契类数列的第 n 项是奇数还是偶数。斐波那契数列是一种数学数列,其中数列中的每个数字都是前两个数字的和。

斐波那契数列的第 n 项可以表示为 -

$$\mathrm{Fn\:=\:F_{n-1}\:+\:F_{n-2}}$$

斐波那契数列的前几个数字是0, 1, 1, 2, 3, 5, 8, 13, 21, 34….

数列的前两个数字是 0 和 1。接下来的数字是前两个数字的和,正如我们在数列中看到的那样。

类似地,在这个问题中,我们将得到一个斐波那契类数列,其中数列中的每个数字都等于前两个数字的和。

我们将得到斐波那契类数列的前两项,假设为 和 ,以及一个正数 N 作为输入。我们需要在这个问题中找出 是否为奇数或偶数。

斐波那契类数列的第 N 项可以通过 给出,这与第 N 个斐波那契数相同,因为它遵循与斐波那契数列相同的模式。

让我们通过一些例子更好地理解这个问题

输入 : $\mathrm{x_0}$=2 , $\mathrm{x_1}$=4 , N=5

输出 : 偶数

解释 - 由于数列的前两项在输入中给出,即 2 和 4。要计算数列的第 N 项,即第 5 项,我们需要计算直到 5 的所有项。因此,可以使用第 N 项的公式找到该数列的下一项。

$$\mathrm{x_2\:=\:x_1\:+\:x_0\:=\:2\:+\:4\:=\:6}$$

$$\mathrm{x_3\:=\:x_2\:+\:x_1\:=\:6\:+\:4\:=\:10}$$

$$\mathrm{x_4\:=\:x_3\:+\:x_2\:=\:10\:+\:6\:=\:16}$$

$$\mathrm{x_5\:=\:x_4\:+\:x_3\:=\:16\:+\:10\:=\:26}$$

由于数列的第 5 项是 26,这是一个偶数

输入 : $\mathrm{x_0}$=3 , $\mathrm{x_1}$=7 , N=4

输出 : 奇数

解释 - 使用第 N 个斐波那契数的公式,直到 4 的斐波那契类数列的下一项为 -

$$\mathrm{x_2\:=\:x_1\:+\:x_0\:=\:7\:+\:3\:=\:10}$$

$$\mathrm{x_3\:=\:x_2\:+\:x_1\:=\:10\:+\:7\:=\:17}$$

$$\mathrm{x_4\:=\:x_3\:+\:x_2\:=\:17\:+\:10\:=\:27}$$

上面数列的第 4 个数字,其前两个数字是 3 和 7,是 27,这是一个奇数。

接下来,我们需要找出斐波那契类数列的第 N 项是偶数还是奇数,其中我们将得到数列的前两个数字和 N 的值作为输入。

以下是我们可以遵循解决上述问题的方法。

方法

方法 1(使用数组)

这是解决此问题的最基本和最简单的方法。我们将像在示例输入中所做的那样找到数列的每个数字,直到 N,并将它们存储在数组中。然后,我们将检查第 N 个数字是偶数还是奇数,并相应地打印输出。

我们将遵循的方法的逐步说明 -

  • 我们将创建一个函数来检查数列的第 N 项。

  • 使用 C++ 中的 MAX 函数创建一个最大长度的数组。

  • 使用 for 循环将数列的每个数字存储在数组中,直到 N。

  • 检查数组中的第 N 项。如果它是偶数,则打印偶数,否则打印奇数。

示例

C++ 中方法的实现 -

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

//function to find out if the N-th term of the sequence is an even or odd number
void evenOrodd(int x, int y, int N){
   int arr[N+1]={0}; //create an array of size 200
   
   //store value of x and y at 0th and 1st index of array
   arr[0]=x;
   arr[1]=y;
   for(int i=2;i<=N;i++){ //iterate through array until N and update corresponding
      
      //value of the sequence at ith index
      arr[i]=arr[i-1]+arr[i-2]; //using the formula
   }
   cout<<N<<"th term of the fibonacci-like sequence is : ";
   
   //to check if it is an even or odd
   if(arr[N]%2==0){
      cout<<"Even"<<endl;
   } else {
      cout<<"Odd"<<endl;
   }
}
int main(){
   int x=3, y=8, N=10;
   evenOrodd(x,y,N);
   x=7, y=13, N=6;
   evenOrodd(x,y,N);
   return 0;
}

输出

10th term of the fibonacci-like sequence is : Even
6th term of the fibonacci-like sequence is : Odd

时间复杂度:O(N),因为我们迭代数组直到 N。

空间复杂度:O(N),因为我们创建了一个大小为 N+1 的数组。

方法 2(观察模式)

在这种方法中,我们将尝试了解斐波那契类数列的第 N 项背后的模式。由于数列的每一项都是前两项的和,因此第 N 项是偶数还是奇数取决于前两项。它们的性质将取决于它们的前两项。因此,第 N 项是偶数还是奇数的性质最终将取决于前两项。

在这种方法中将有四种情况 -

  • 1. 前两项都是偶数。

  • 2. 前两项都是奇数。

  • 3. 第一项是偶数,第二项是奇数。

  • 4. 第一项是奇数,第二项是偶数。

  • 情况 1 - 在第一种情况下,两项都是偶数,即 $\mathrm{x_0}$ 和 $\mathrm{x_1}$。在这种情况下,数列中的任何数字都将仅为偶数,因为两个偶数的和始终为偶数。

    例如,如果 $\mathrm{x_0}$=2 且 $\mathrm{x_1}$=4,则数列将为 2, 4, 6, 10, 16, 26, 42…。

  • 情况 2 - 对于这种情况,前两项将是奇数。两个奇数的和将始终为偶数。因此,在这种情况下,$\mathrm{x_2}$ 将始终为偶数。此外,$\mathrm{x_3}$ 将为奇数,因为偶数和奇数的和将始终为奇数。让我们用一个例子来理解这个模式:$\mathrm{x_0}$=1 且 $\mathrm{x_1}$=3。因此,数列的下一项将为 $\mathrm{x_2}$=4, $\mathrm{x_3}$=7, $\mathrm{x_4}$=11, $\mathrm{x_5}$=18, $\mathrm{x_6}$=29, $\mathrm{x_7}$=47, $\mathrm{x_8}$=76…..

    观察模式,我们可以观察到偶数在 N=2,5,8 处连续重复,可以用 3*a-1 表示,对于 a 的任何正值。因此,在这种情况下,$\mathrm{x_N}$ 将为偶数 N 可以表示为 (3*a-1),对于 a 的任何正值,否则对于所有其他情况,$\mathrm{x_N}$ 将为奇数。

  • 情况 3 - 在这种情况下,第一项将为偶数,第二项将为奇数。任何偶数和奇数的和始终为奇数。下一项将为偶数,因为前两项为奇数。让我们尝试用一个例子来理解这种情况的模式,$\mathrm{x_0}$=2 且 $\mathrm{x_1}$=3。数列的接下来的几项将为,

    $\mathrm{x_2}$=5, $\mathrm{x_3}$=8, $\mathrm{x_4}$=13, $\mathrm{x_5}$=21, $\mathrm{x_6}$=34, $\mathrm{x_7}$=55, $\mathrm{x_8}$=89, $\mathrm{x_9}$=144……

    我们可以看到偶数仅在 3 的倍数处重复。因此,$\mathrm{x_N}$ 仅在 N 为 3 的倍数时为偶数,否则为奇数。

  • 情况 4 - 这是第一项为奇数,第二项为偶数的情况。让我们用一个例子来研究这个模式,$\mathrm{x_0}$=1 且 $\mathrm{x_1}$=2。数列中的前几个数字将为,

    $\mathrm{x_2}$=3, $\mathrm{x_3}$=5, $\mathrm{x_4}$=8, $\mathrm{x_5}$=13, $\mathrm{x_6}$=21, $\mathrm{x_7}$=34, $\mathrm{x_8}$=55, $\mathrm{x_9}$=89, $\mathrm{x_10}$=144……

观察模式,我们可以得出结论,偶数在 N=4,7,10…. 处连续重复。这些可以用 3*a+1 表示,对于 a 的任何正值或 0。我们可以说,如果 N 的形式为 (3*a+1),则数列的 𝑥𝑁 将为偶数,否则对于 N 的所有其他值,该数字将为奇数。

示例

C++ 中方法的实现 -

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

//function to check if N-th term of fibonacci-like sequence is even or odd
void evenOrodd(int x,int y,int N){
   if(N==0){
      if(x%2==0) //to check if it is even
      cout<<"N-th term is : Even"<<endl;
      else
      cout<<"N-th term is : Odd"<<endl;
      return;
   }
   if(N==1){
      if(y%2==0)
      cout<<"N-th term is : Even"<<endl;
      else
      cout<<"N-th term is : Odd"<<endl;
      return;
   }
   if(x%2==0){ //if x is even
      if(y%2==0){ //if y is even
         cout<<"N-th term is : Even"<<endl;
      }
      else{
         if(N%3==0) //if one term is even and other is odd
            cout<<"N-th term is : Even"<<endl;
         else
            cout<<"N-th term is : Odd"<<endl;
      }
      return;
   } else { //if x is odd
      if(y%2!=0){ //if y is odd too
         if((N+1)%3==0)
            cout<<"N-th term is : Even"<<endl;
         else
            cout<<"N-th term is : Odd"<<endl;
      }
      else{ //if y is an even number
         if((N-1)%3==0)
            cout<<"N-th term is : Even"<<endl;
         else
            cout<<"N-th term is : Odd"<<endl;
      }
      return;
   }
}
int main(){
   int x=6,y=10,N=7;
   evenOrodd(x,y,N);
   x=13, y=16, N=5;
   evenOrodd(x,y,N);
   return 0;
}

输出

N-th term is : Even
N-th term is : Odd

时间复杂度:O(1),因为检查需要常数时间。

空间复杂度:O(1),没有占用额外的空间。

结论

在本文中,我们学习了如何检查斐波那契类数列的第 N 项是偶数还是奇数。我们尝试使用两种不同的方法来解决此问题,在第一种方法中,我们使用数组找到直到 N 的数列并检查第 N 项,而在第二种方法中,我们尝试学习数列中遵循的模式。第二种方法是两种方法中最有效的方法,因为它需要常数时间。我希望本文能帮助您学习解决此问题的概念,并发现本文对您有所帮助。

更新于:2023-03-16

298 次浏览

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告