32 lines
492 B
C
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;
|
|
} |