D-小蓝的二进制询问_河南萌新联赛2024第(一)场:河南农业大学 (nowcoder.com)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef long double ldb;
typedef pair<int, int> pii;
typedef pair<ll, ll> PII;
#define pb emplace_back
//#define int ll
#define all(a) a.begin(),a.end()
//#define x first
#define y second
#define ps push_back
#define endl '\n'
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define lc u << 1
#define rc u << 1 | 1
void solve();
const int N = 1e6 + 10;
const int mod = 998244353;
signed main() {
IOS;
ll t = 1;
cin >> t;
while (t--)
solve();
return 0;
}
ll f(ll x)
{
ll e = 2,sum = 0;
x++;//0 也算一个,所以真实的下标是数字+1
while(x >= e/2)//x 最大二进制位 x/2
{
sum = (sum + (x/e)*(e/2)) % mod;
if(x % e != 0)
sum =( sum + max(0LL,x % e - e/2))%mod;//前半部分,后半部分
e *= 2;
}
return sum;
}
void solve() {
ll l,r;
cin >> l >> r;
cout << (f(r) - f(l-1) + mod) % mod << endl;
}