找规律。
0: 00000(偶数个)
1: 00001(奇数个)
2: 00010(奇数个)
3: 00011(偶数个)
4: 00100(奇数个)
5: 00101(偶数个)
6: 00110(偶数个)
7: 00111(奇数个)
8: 01000(奇数个)
9: 01001(偶数个)
10:01010(偶数个)
11:01011(奇数个)
每四个数里面都包含两个满足条件的。
#include<bits/stdc++.h> #define int long long using namespace std; int solve(int x){ int res = 0; while(x){ if(x&1) res++; x>>=1; } if(res&1) return 1; else return 0; } signed main(){ std::ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); int t; cin>>t; while(t--){ int l, r; cin>>l>>r; if((r-l+1)<=4){ int ans = 0; for(int i = l; i <= r; i++){ ans += solve(i); } cout<<ans<<endl; continue; } int x = l/4*4+3; int res = (r-x)/4; if(res*4==r-x) res--; res *= 2; for(int i = l; i <= x; i++){ res += solve(i); } for(int i = r/4*4; i <= r; i++){ res += solve(i); } cout<<res<<endl; } return 0; }