通过二进制分析可知,该条件等价于 x⊕4x=5x 。由于 4x 是 x 的二进制左移两位, 5x=4x+x ,因此该条件成立的关键是 x 的二进制表示中不存在两个相距两位的 1(即没有位 i 和位 i+2 同时为 1)。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef int yy;
const int OvO = 0;

vector<int> to_binary(ll x)
{
    vector<int> bits(64, 0);
    for (int i = 63; i >= 0; i--)
    {
        bits[63 - i] = (x >> i) & 1;
    }
    return bits;
}

ll dp[65][2][2][2];
vector<int> bits;

ll dfs(int pos, int a, int b, int tight)
{
    if (pos == 64)
        return 1;
    if (dp[pos][a][b][tight] != -1)
        return dp[pos][a][b][tight];

    ll res = 0;

    int limit = tight ? bits[pos] : 1;

    for (int val = 0; val <= limit; val++)
    {
        if (val == 1 && b == 1)
        {
            continue;
        }
        int new_a = val;
        int new_b = a;
        int new_tight = tight && (val == limit);

        res += dfs(pos + 1, new_a, new_b, new_tight);
    }
    return dp[pos][a][b][tight] = res;
}

ll cnt(ll x)
{
    bits = to_binary(x);
    memset(dp, -1, sizeof(dp));
    return dfs(0, 0, 0, 1);
}
int main()
{
    std::ios::sync_with_stdio(0);
    cin.tie(0);

    ll t, l, r;
    cin >> t;
    while (t--)
    {
        cin >> l >> r;
        cout << cnt(r) - cnt(l - 1) << endl;
        ;
    }

    return OvO;
}