问题描述:给一个数字区间范围,判断这个区间的数字的二进制形式中,1的个数为质数的数字共计多少个。
思路:首先是找出一个数的二进制形式中,1的个数总计。解决方法是通过将数字右移然后除以2取余。随后计算这个数字是不是质数。
原代码:
public int countPrimeSetBits(int L, int R) {
int result=0;
for(int i=L;i<=R;i++) {
int num=countNum(i);
if(judge(num))
result++;
}
return result;
}
private int countNum(int num) {
int result=0;
do {
if(num%2!=0)
result++;
num=num>>1;
}while(num>0);
return result;
}
private boolean judge(int num) {
boolean result=true;
if(num==1)
return false;
if(num==2||num==3)
return true;
for(int i=2;i<=Math.sqrt(num);i++)
{
if(num%i==0)
{
result=false;
break;
}
}
return result;
}