B B - New Year and Old Property
找出 【a,b】之间 所有的 二进制下只有1个零的数的个数
因为这样的数不是很多,先预处理出来,每次询问直接查找便可;
trick: 求__int64 all=(1<<60)-1,时,1是默认是int,这样得到的all是溢出的int,
找出 【a,b】之间 所有的 二进制下只有1个零的数的个数
因为这样的数不是很多,先预处理出来,每次询问直接查找便可;
trick: 求__int64 all=(1<<60)-1,时,1是默认是int,这样得到的all是溢出的int,
可以__int64 one=1; __int64 all=(one<<60)-1; 或者 __int64 all=(1LL<<60)-1
int inf=15;
double eps=0.000001;
__int64 n,m;
__int64 ans[8000];
int main()
{
__int64 i,j;
int ok=0;
__int64 one=1;
for(j=1;j<=61;j++)
{
__int64 all=(one<<j)-1;
for (i=1;i<j;i++)
{
ans[++ok]=all^(one<<(i-1));
}
}
sort(ans+1,ans+1+ok);
scanf("%I64d%I64d",&n,&m);
int it=lower_bound(ans+1,ans+1+ok,n)-ans;
int it2=upper_bound(ans+1,ans+1+ok,m)-ans;
it2--;
int ret=it2-it+1;
printf("%d\n",ret);
return 0;
}