求出两个前缀的和,求差。
计算前缀中,可以先求出奇数与偶数的个数,根据公式求解。
ll cal(ll x)
{
ll numj = 0, numo = 0;
ll k = 0,now=1;
while (x > (ll)0)
{
ll tmp = min(x, now);
if (k)
{
numo += tmp;
x -= tmp;
}
else
{
numj += tmp;
x -= tmp;
}
now <<= 1;
k ^= 1;
}
ll sum = (numj%mod)*(numj % mod)%mod;
sum += (numo + 1)%mod*(numo%mod)%mod;
return sum%mod;
}
int main()
{
ll l, r;
while (cin >> l >> r)
{
cout << ((cal(r) - cal(l - 1) + mod) % mod) << endl;
}
return 0;
}