先找一找序列的规律
发现和斐波那契数列很像
设
f
i
f_i
fi为斐波那契数列第i项
则前
f
i
f_i
fi个中有
f
i
−
1
f_{i-1}
fi−1个1
而且将前
f
i
f_i
fi个去掉后,剩下的序列依然满足
所以直接做就可以了
c o d e code code
#include<iostream>
#include<cstdio>
#define ll unsigned long long
using namespace std;
ll t;
ll a, b, f[110];
ll d(ll x)
{
ll ans=0;
while(x)
{
ll i=1;
while(x>=f[i]) i++;
i--;
// cout<<f[i-1]<<' '<<f[i]<<' '<<i<<endl;
ans+=f[i-1];
x-=f[i];
}
return ans;
}
int main()
{
scanf("%llu", &t);
f[1]=f[2]=1;
for(ll i=3; i<=100; i++)
f[i]=f[i-1]+f[i-2];
while(t--)
{
scanf("%llu%llu", &a, &b);
printf("%llu\n", d(b)-d(a-1));
}
return 0;
}