762. Prime Number of Set Bits in Binary Representation
Description
Given two integers left and right, return the count of numbers in the inclusive range [left, right] 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,
21written in binary is10101, which has3set bits.
Β
Example 1:
Input: left = 6, right = 10 Output: 4 Explanation: 6 -> 110 (2 set bits, 2 is prime) 7 -> 111 (3 set bits, 3 is prime) 8 -> 1000 (1 set bit, 1 is not prime) 9 -> 1001 (2 set bits, 2 is prime) 10 -> 1010 (2 set bits, 2 is prime) 4 numbers have a prime number of set bits.
Example 2:
Input: left = 10, right = 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) 5 numbers have a prime number of set bits.
Β
Constraints:
1 <= left <= right <= 1060 <= right - left <= 104
Solutions
Solution 1: Math + Bit Manipulation
In the problem, both \(\textit{left}\) and \(\textit{right}\) are within the range of \(10^6\), and since \(2^{20} = 1048576\), the number of \(1\)s in binary representation can be at most \(20\). The prime numbers within \(20\) are \([2, 3, 5, 7, 11, 13, 17, 19]\).
We enumerate each number in the range \([\textit{left},.. \textit{right}]\), count the number of \(1\)s in its binary representation, and then check if this count is a prime number. If it is, we increment the answer by one.
The time complexity is \(O(n\times \log m)\), where \(n = \textit{right} - \textit{left} + 1\) and \(m\) is the maximum number in the range \([\textit{left},.. \textit{right}]\).
1 2 3 4 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |