#include #include #include using namespace std; unsigned long long t,a[101],x,y; unsigned long long find(unsigned long long now)//求区间1和now之间有多少个1 { unsigned long long ans=0,j;//初始化 while (now)//还可以拆分 { j=1; while (a[j+2]<=now) j++;//寻找可以减的 ans+=a[j];//加上一的个数 now-=a[j+1];//减(拆分) } return ans; } int main() { scanf("%llu",&t);//读入 a[1]=1; a[2]=1;//初始化 for (int i=3;i<=100;i++) a[i]=a[i-1]+a[i-2];//斐波那契 for (unsigned long long i=1;i<=t;i++) { scanf("%llu%llu",&x,&y);//读入 printf("%llu\n",find(y)-find(x-1));//利用前缀和求出答案,然后输出 } return 0; }