在C ++中找到具有给定索引的N个斐波那契数的GCD

在这里,我们必须找到具有给定索引的n个斐波纳契项的GCD。因此,首先我们必须获得最大索引,并生成斐波那契项,一些斐波那契项是这样的:0、1、1、2、3、5、8、13、21、34,...。从0.因此,在0处的元素索引是0。如果我们必须找到在索引斐波纳契术语的GCD {2,3,4,5},那么术语是{1,2,3,4},所以GCD这些数字是1。

我们将使用一种有趣的方法来完成此任务。要获得第i个和第j个斐波纳契项的GCD,例如GCD(Fibo(i),Fibo(j)),我们可以将其表示为Fibo(GCD(i,j))

示例

#include <iostream>
#include <algorithm>
using namespace std;
int getFiboTerm(int n){
   int fibo[n + 2];
   fibo[0] = 0; fibo[1] = 1;
   for(int i = 2; i<= n; i++){
      fibo[i] = fibo[i - 1] + fibo[i - 2];
   }
   return fibo[n];
}
int getNFiboGCD(int arr[], int n){
   int gcd = 0;
   for(int i = 0; i < n; i++){
      gcd = __gcd(gcd, arr[i]);
   }
   return getFiboTerm(gcd);
}
int main() {
   int indices[] = {3, 6, 9};
   int n = sizeof(indices)/sizeof(indices[0]);
   cout << "GCD of fibo terms using indices: " <<
   getNFiboGCD(indices, n);
}

输出结果

GCD of fibo terms using indices: 2