每日一题-二进制表示中质数个计算置位

762. 二进制表示中质数个计算置位

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/prime-number-of-set-bits-in-binary-representation

题目

给你两个整数 leftright ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。

计算置位位数 就是二进制表示中 1 的个数。

  • 例如, 21 的二进制表示 10101 有 3 个计算置位。

思路

简单模拟,利用n&(n-1)去掉n中最右的1并记录个数。由于int型最多32位,直接将32以内的质数存起来查询。
此外,n&-n操作效果为只保留最右的1

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
int countPrimeSetBits(int left, int right) {
int ans = 0;
unordered_set<int> prime = {
2,3,5,7,11,13,17,19
}
;
for (int i = left ; i <= right ; ++i) {
int k = 0;
int num = i;
while(num) {
++k;
num &= num-1;
}
if (prime.count(k)) {
++ans;
}
}
return ans;
}
}
;