斐波那契进制



​题目​


分析

可以发现兔子的这种繁衍方式就是\(f[i]=f[i-1]+f[i-2]\),

将每个数用斐波那契进制表示可以发现,

一个数的父亲就是这个数减去斐波那契前驱,直接往上跳祖先即可


代码
#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
typedef long long lll; lll fib[61];
inline lll iut(){
rr lll ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(lll ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
signed main(){
fib[1]=fib[2]=1;
for (rr int i=3;i<60;++i)
fib[i]=fib[i-1]+fib[i-2];
for (rr int n=iut();n;--n){
rr lll x=iut(),y=iut();
while (x!=y){
if (x<y) x^=y,y^=x,x^=y;
rr int m=lower_bound(fib+1,fib+60,x)-fib;
x-=fib[m-1];
}
print(x),putchar(10);
}
return 0;
}