题目

The GCD of Fibonacci Numbers

思路

重要性质:,当中 表示斐波那契数列的第 项。

题目中保证了 直接递推求就可以了。

#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>

typedef long long ll;
ll t,n,m,fib[47];

inline void read(ll &T) {
    ll x=0;bool f=0;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    T=f?-x:x;
}

ll gcd(ll a,ll b) {
    return b?gcd(b,a%b):a;
}

int main() {
    read(t);fib[1]=1,fib[2]=1,fib[3]=2;
    for(int i=4;i<=46;++i) fib[i]=fib[i-1]+fib[i-2];
    while(t--) {
        read(n),read(m);
        if(m>n) std::swap(n,m);
        std::cout<<fib[gcd(n,m)]<<'\n';
    }
    return 0;
}