ll sum(ll x,int y){ //[1,x]中,第y位是1的个数,y从1开始编号。
if(x==0) return 0;
ll s=1LL<<y;
ll cnt=x/s;
ll ans=cnt*s/2;
ll d=cnt*s+(1LL<<(y-1));
ll dd=x-d+1;
if(dd>0) ans+=dd;
return ans;
}
计算区间[1,x]中所有数字二进制下某一位是1的数字个数
最新推荐文章于 2024-01-24 23:23:37 发布