代码改变世界

再战斐波那契(打表)

2019-07-27 20:26  木木王韦  阅读(100)  评论(0)    收藏  举报

再战斐波那契

单点时限: 1.0 sec

内存限制: 512 MB

小z 学会了斐波那契和 gcd 后,老师又给他出了个难题,求第N个和第M个斐波那契数的最大公约数,这可难倒了小z ,不过在小z 的再三请求下,老师又告诉他了个条件,gcd(N,M)∈[1,90]。
可是,笨拙的小z 还是不会,于是请求你帮他解答这个问题。

已知:
Fibonacci[i]={i,Fibonacci[i−1]+Fibonacci[i−2],i<=1i>1
输入格式
输入包括 T 组,T∈[1,10].
接下来 T 行,每行两个整数 N,M, 表示斐波那契的第 N 项和第 M 项,(N,M∈[1,1018]).

输出格式
输出包含 T 行,每行输出一个整数.

样例
input
3
1 2
2 3
3 4
output
1
1
1

!!!!这道题在网络赛好像是签到。。。我发现了__gcd(fib(N),fib(M))=fib(__gcd(N,M))
但是!!!!交了好几发都是wa,没想到打表。。。。(气哭TAT)

#include<iostream>

#include<algorithm>
using namespace std;

long long int t,m,n;


long long int fib[105];



int main(){
	fib[1]=1;
	fib[2]=1;
	for(int i=2;i<=100;i++){
		fib[i]=fib[i-1]+fib[i-2];
	}
	cin>>t;
	while(t--){
		cin>>m>>n;
		
		//cout<<fib(m)<<"   "<<fib(n)<<endl;
		//cout<<__gcd(m-1,n-1)<<endl;
		cout<<fib[__gcd(m,n)]<<endl;
		//cout<<__gcd(fib(m),fib(n))<<endl;
		//if((n%3)==(m%3)){
		//	if()
		//}
	}
	
	
	return 0;
}