762. 二进制表示中质数个计算置位
思路 : 直接转化为二进制进行统计计算置位,在判断计算置位是不是质数
class Solution {
public int countPrimeSetBits(int left, int right) {
int ans = 0;
for(int i = left ; i <= right ; i++){
int j = i;
int cnt= 0 ;
while( j> 0 ){
cnt += (j & 1); // 得到计算置位
j >>= 1;
}
if(judge(cnt) && cnt > 1) {
// System.out.println(cnt);
ans++;
}
}
return ans;
}
public static boolean judge(int cnt){
// 枚举到根号位置, 也可以用欧拉筛检查素数,这里是为了图方便。hah
int ed = (int)Math.sqrt(cnt);
for(int i = 2 ; i <= ed ; i++){
if(cnt % i == 0) return false;
}
return true;
}
}