LeetCode-762. Prime Number of Set Bits in Binary Representation

本文介绍了一种算法,用于找出指定范围内具有质数个数的二进制位的整数数量。通过两个C++实现示例展示了如何利用bitset和其他技巧高效地解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

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

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

Solution 1(C++)

static int x = [](){std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();

class Solution {
public:
    int countPrimeSetBits(int L, int R) {

        int count = 0;
        for(int x = L; x <= R; x++)
        {
            bitset<32> bits(x);
            int n = bits.count();
            if(n == 2 || n == 3 || n == 5 || n == 7 || n == 11 || n == 13 || n == 17 || n == 19) count++;
        }
        return count;
    }
};

Solution 2(C++)

static int x=[](){std::ios::sync_with_stdio(false); cin.tie(NULL); return 0;}();
class Solution {
public:
    int countPrimeSetBits(int l, int r) {
        set<int> primes = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 };
        int cnt = 0;
        for (int i = l; i <= r; i++) {
            int bits = 0;
            for (int n = i; n; n >>= 1)
                bits += n & 1;
            cnt += primes.count(bits);
        }
        return cnt;
    }
};

算法分析

这道题的算法中使用了bitset这个数据结构。值得好好注意下。后面也是会专门整理一下这个容器的。

要说的有一点,那就是其实特殊情况要学会融会贯通,灵活一点。判断一个数是不是质数当然可以从其定义上来判断。但是在情况限定较多的时候,可以直接罗列出来,这样会节约很多程序运行时间。

程序分析

bitset容器学习后两天会抽时间整理的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值