将一个数化为二进制,1的个数与其所在的位置即是二进制分解的结果。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n,p,cnt,flag=0, ans;
scanf("%lld%lld",&n,&p);
for(ll i=1;n-i*p>=i;i++)
{
ll x=n-i*p;
cnt=0;
while(x)
{
if(x%2==1)
cnt++;
x/=2;
}
if(i>=cnt)
{
flag=1;
ans=i;
break;
}
}
if(flag)
printf("%lld\n",ans);
else printf("-1\n");
return 0;
}