2026-01-15 22:50:44 +09:00

32 lines
492 B
C

#include <stdio.h>
typedef long long ll;
ll dp[55];
ll count_one(ll N);
int main() {
ll A, B;
scanf("%lld %lld",&A, &B);
for(int i=1; i<55; i++) dp[i] = 2*dp[i-1] + (1LL << (i-1));
printf("%lld\n", count_one(B) - count_one(A-1));
return 0;
}
ll count_one(ll N) {
ll res = 0;
for(int i=54; i>0; i--) {
ll MSB = N & (1LL <<(i-1));
if(MSB) {
res += dp[i-1] + (N - MSB + 1);
N -= MSB;
}
}
return res;
}