题目
题意:给出一个数n和p计算是否有数(2^x1-p+ 2x2-p+…2xt-p)==n,输出t的最小值,若不存在输出-1.
思路:由题意中的公式可得n-tp=2^x1+… 2^t
所以可以得到n-tp>=t,应为t^0=1,由二进制的规则可得n-tp中二进制数中的1的数量一定小于等于t
AC代码:
import java.util.*;
import java.io.*;
import java.util.*;
import java.io.*;
public class MM {
static Scanner scanner=new Scanner(System.in);
public static void main(String[] args) {
int n=scanner.nextInt();
int k=scanner.nextInt();
int t=0;
while(n-k*(t)>=t) {
int z=n-k*(t);//判断z的数据
int s=0;
while(z>0) {
if(z%2==1)s++;
z/=2;
}
if(s<=t) {
System.out.println(t);
return;
}
t++;
}
System.out.println(-1);
}
}