题目描述
斐波那契数列满足F1=F2=1,从F3开始有Fn=Fn-1+Fn-2。
请你计算GCD(F2020,F520),其中GCD(A,B)表示A和B的最大公约数。
解题思路
首先需要知道两个知识点1.斐波那契数列最大公约数定理gCa,Fb)=F(gcd(a,b))2.辗转相除法求最大公约数 例如:求a,b的最d(Fa,Fb)=F(gcd(a,b))大公约数(假设a>b),如果a%b不等于0,那么a,b的最大公约数就等于b和a%b的余数的最大公约数。
#include <iostream>
using namespace std;
int fb(int x){
if(x==1||x==2) return 1;
return fb(x-1)+fb(x-2);
}
int gcd(int a,int b){
if(a%b==0) return b;
int t=0;
while(a%b!=0){
t=a%b;
a=b;
b=t;
}
return b;
}
int main()
{
// 请在此输入您的代码
cout<<fb(gcd(2020,520));
return 0;
}