762. Prime Number of Set Bits in Binary Representation

Given two integers L and R, find the count of numbers in the range [L, R] (inclusive) having a prime number of set bits in their binary representation.

(Recall that the number of set bits an integer has is the number of 1s present when written in binary. For example, 21 written in binary is 10101 which has 3 set bits. Also, 1 is not a prime.)

Example 1:

Input: L = 6, R = 10
Output: 4
Explanation:
6 -> 110 (2 set bits, 2 is prime)
7 -> 111 (3 set bits, 3 is prime)
9 -> 1001 (2 set bits , 2 is prime)
10->1010 (2 set bits , 2 is prime)
Example 2:

Input: L = 10, R = 15
Output: 5
Explanation:
10 -> 1010 (2 set bits, 2 is prime)
11 -> 1011 (3 set bits, 3 is prime)
12 -> 1100 (2 set bits, 2 is prime)
13 -> 1101 (3 set bits, 3 is prime)
14 -> 1110 (3 set bits, 3 is prime)
15 -> 1111 (4 set bits, 4 is not prime)

Note:
L, R will be integers L <= R in the range [1, 10^6].
R - L will be at most 10000.

思路:根据提示,数字范围在1~1000000之间,而2^20 =1048576>10^6,即20位的二进制可以表示0~1048575之间的任意数,因此不用太花功夫考虑怎么判断质数,只要找出20以内的质数存在集合里,判断是否属于集合即可(set容器的count()方法).
剩下的很简单,对[L, R]的每个数i,每次将i和1进行与操作

  110      111
& 001    & 001
------  ------
  000      001

若结果为0,则最低位为0;结果为1,则最低位为1.
然后i右移一位,继续检查最低位.
直到i为0.

int countPrimeSetBits(int L, int R) {
    set<int> prime = {2, 3, 5, 7, 11, 13, 17, 19}; //20以内质数集合
    int res = 0;
    for (int i = L; i <= R; i++) { //遍历从L到R的整数
        int set_bits = 0; //"set bit"数,即1的个数
        int tmp = i;
        while (tmp) {
            if (tmp & 1) set_bits++;  //若与操作结果为1,说明找到一个set bit
            tmp >>= 1; //自右移操作
        }
        //检查set_bits是否在质数集中
        if (prime.count(set_bits)) res++;
    }
    return res;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题(Easy): Given two integers L and R, find the count of n...
    Cloudox_阅读 4,894评论 0 0
  • 今天我看见王一涵拿着一本书好像是恐怖故事是关于老鼠的。她问我:"李小燕等我看完之后你想看吗?"我点了点头,她说:"...
    英语叛逆者阅读 1,576评论 0 1
  • 阅读经典——《算法导论》05 本文介绍一种神奇的排序方法:堆排序。 堆排序不像插入排序和归并排序那样直观,它利用了...
    金戈大王阅读 3,157评论 0 0
  • 现在城市中的汽车日新月异,繁衍生息。几乎每个家庭都拥有一部自己的私家车。一个车四个座位,一个人。 汽车给我们的生活...
    XUYU阅读 1,045评论 0 0

友情链接更多精彩内容