文件详细信息
本文件的大小为 611 字节。
#include<cstdio>
#include<cstring>
typedef long long ll;
int l,r,num;
int f[32][64];
int dfs(int digit,int diff,int limit,int zero){
if(digit==-1)return diff>=32;
if(!limit&&!zero&&f[digit][diff]!=-1)return f[digit][diff];
int ans=0,d=limit?((num>>digit)&1):1;
for(int i=0;i<=d;i++)ans+=dfs(digit-1,diff+(i?-1:zero?0:1),limit&&d==i,zero&&i==0);
if(!limit&&!zero)f[digit][diff]=ans;
return ans;
}
int solve(int n){
num=n;
int bit=0;
while(n)bit++,n>>=1;
memset(f,-1,sizeof(f));
int ans=dfs(bit,32,1,1);
return ans;
}
int main(){
scanf("%d%d",&l,&r);
printf("%d\n",solve(r)-solve(l-1));
return 0;
}