传送门:点击打开链接
题目大意:
求斐波那契数列第n项和第m项的最大公约数,结果%1e9.
思路:
gcd(f[n],f[m])=f[gcd(n,m)]
不要问我怎么知道的,我也不知道。
底下就顺理成章了,注意gcd要迭代法- -。还有就是防RE,斐波那契数列可以只保留3个- -
#include<bits/stdc++.h> using namespace std; const long long maxn = 5; long long n,m,f[maxn]; long long gcd(long long a,long long b) { while(1) { if(b==0) break; long long t=b; b=a%b; a=t; } return a; } int main() { scanf("%lld%lld",&n,&m); long long p = gcd(n,m); f[1]=f[2]=1; if(p>150000000) p=p%150000000; for(long long i=3;i<=p;i++) f[i%3] = (f[(i-1)%3]%100000000+f[(i-2)%3]%100000000)%100000000; //3位斐波那契递推 cout<<f[p%3]<<endl; return 0; }