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 1
s 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.利用位運算來數1
的個數
【n爲[L, R]的數字個數,len爲R的二進制的位數】
- 時間複雜度:O(n * m)
- 空間複雜度:O(1)
// First Solution(Runtime: 39ms)
class Solution {
public:
int countPrimeSetBits(int L, int R) {
set<int> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
int result = 0;
for (int i = L; i <= R; i++) {
// determine every number in [L, R]
int bits = 0;
for (int b = i; b; b >>= 1) { // shift operation
// determine if the end is 1
bits += b & 1;
}
result += primes.count(bits);
}
return result;
}
};
2.利用bitset來數1
的個數
【n爲[L, R]的數字個數,len爲R的二進制的位數】
- 時間複雜度:O(n * m)
- 空間複雜度:O(1)
雖然複雜度沒有太大的變化,但是利用bitset
可以簡化十進制轉換爲二進制。
並且bitset
中有函數count()
可以統計其中1
的個數。
// Second Solution(Runtime: 21ms)
class Solution {
public:
int countPrimeSetBits(int L, int R) {
set<int> primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
int result = 0;
for (int i = L; i <= R; i++) {
bitset<100> b(i);
result += primes.count(b.count());
}
return result;
}
};