Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/762.html
762. Prime Number of Set Bits in Binary Representation (Easy)
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 integersL <= R
in the range[1, 10^6]
.R - L
will be at most 10000.
Companies:
Amazon
Related Topics:
Bit Manipulation
Similar Questions:
Solution 1.
// OJ: https://leetcode.com/problems/prime-number-of-set-bits-in-binary-representation/
// Time: O(N)
// Space: O(1)
class Solution {
private:
int getBitCount(int n) {
int cnt = 0;
while (n) {
cnt += n % 2;
n >>= 1;
}
return cnt;
}
public:
int countPrimeSetBits(int L, int R) {
unordered_set<int> s{ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 };
int ans = 0;
for (; L <= R; ++L) {
int cnt = getBitCount(L);
if (s.find(cnt) != s.end()) ++ans;
}
return ans;
}
};
-
class Solution { public int countPrimeSetBits(int L, int R) { int count = 0; for (int i = L; i <= R; i++) { int ones = Integer.bitCount(i); if (isPrime(ones)) count++; } return count; } public boolean isPrime(int num) { if (num == 1) return false; if (num == 2 || num == 3) return true; if (num % 2 == 0 || num % 3 == 0) return false; int upper = (int) Math.sqrt(num); for (int i = 5; i <= upper; i += 2) { if (num % i == 0) return false; } return true; } }
-
// OJ: https://leetcode.com/problems/prime-number-of-set-bits-in-binary-representation/ // Time: O(N) // Space: O(1) class Solution { private: int getBitCount(int n) { int cnt = 0; while (n) { cnt += n % 2; n >>= 1; } return cnt; } public: int countPrimeSetBits(int L, int R) { unordered_set<int> s{ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31 }; int ans = 0; for (; L <= R; ++L) { int cnt = getBitCount(L); if (s.find(cnt) != s.end()) ++ans; } return ans; } };
-
class Solution: def countPrimeSetBits(self, left: int, right: int) -> int: primes = {2, 3, 5, 7, 11, 13, 17, 19} return sum(i.bit_count() in primes for i in range(left, right + 1)) ############ import math class Solution(object): def isPrime(self, num): if num == 1: return 0 elif num == 2: return 1 for i in xrange(2, int(math.sqrt(num))+1): if num % i == 0: return 0 return 1 def countPrimeSetBits(self, L, R): """ :type L: int :type R: int :rtype: int """ return sum(self.isPrime(bin(num)[2:].count('1')) for num in xrange(L, R+1))