Overflow in intermediate arithmetic
Wrong move: Temporary multiplications exceed integer bounds.
Usually fails on: Large inputs wrap around unexpectedly.
Fix: Use wider types, modular arithmetic, or rearranged operations.
Build confidence with an intuition-first walkthrough focused on math fundamentals.
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.
21 written in binary is 10101, which has 3 set 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 <= 104Problem summary: 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, 21 written in binary is 10101, which has 3 set bits.
Start with the most direct exhaustive search. That gives a correctness anchor before optimizing.
Pattern signal: Math · Bit Manipulation
6 10
10 15
number-of-1-bits)Source-backed implementations are provided below for direct study and interview prep.
// Accepted solution for LeetCode #762: Prime Number of Set Bits in Binary Representation
class Solution {
private static Set<Integer> primes = Set.of(2, 3, 5, 7, 11, 13, 17, 19);
public int countPrimeSetBits(int left, int right) {
int ans = 0;
for (int i = left; i <= right; ++i) {
if (primes.contains(Integer.bitCount(i))) {
++ans;
}
}
return ans;
}
}
// Accepted solution for LeetCode #762: Prime Number of Set Bits in Binary Representation
func countPrimeSetBits(left int, right int) (ans int) {
primes := map[int]int{}
for _, v := range []int{2, 3, 5, 7, 11, 13, 17, 19} {
primes[v] = 1
}
for i := left; i <= right; i++ {
ans += primes[bits.OnesCount(uint(i))]
}
return
}
# Accepted solution for LeetCode #762: Prime Number of Set Bits in Binary Representation
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))
// Accepted solution for LeetCode #762: Prime Number of Set Bits in Binary Representation
impl Solution {
pub fn count_prime_set_bits(left: i32, right: i32) -> i32 {
let primes = [2, 3, 5, 7, 11, 13, 17, 19];
let mut ans = 0;
for i in left..=right {
let bits = i.count_ones() as i32;
if primes.contains(&bits) {
ans += 1;
}
}
ans
}
}
// Accepted solution for LeetCode #762: Prime Number of Set Bits in Binary Representation
function countPrimeSetBits(left: number, right: number): number {
const primes = new Set<number>([2, 3, 5, 7, 11, 13, 17, 19]);
let ans = 0;
for (let i = left; i <= right; i++) {
const bits = bitCount(i);
if (primes.has(bits)) {
ans++;
}
}
return ans;
}
function bitCount(i: number): number {
i = i - ((i >>> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
i = (i + (i >>> 4)) & 0x0f0f0f0f;
i = i + (i >>> 8);
i = i + (i >>> 16);
return i & 0x3f;
}
Use this to step through a reusable interview workflow for this problem.
Sort the array in O(n log n), then scan for the missing or unique element by comparing adjacent pairs. Sorting requires O(n) auxiliary space (or O(1) with in-place sort but O(n log n) time remains). The sort step dominates.
Bitwise operations (AND, OR, XOR, shifts) are O(1) per operation on fixed-width integers. A single pass through the input with bit operations gives O(n) time. The key insight: XOR of a number with itself is 0, which eliminates duplicates without extra space.
Review these before coding to avoid predictable interview regressions.
Wrong move: Temporary multiplications exceed integer bounds.
Usually fails on: Large inputs wrap around unexpectedly.
Fix: Use wider types, modular arithmetic, or rearranged operations.