本题注意点:特殊之处在于二进制1的个数有限,先手动求出所有可能素数更快。
import numpy as np
import math
def countPrimeSetBits(L, R):
"""
:type L: int
:type R: int
:rtype: int
"""
def is_prime(x):
if x == 1: return False
for i in range(2, int(math.sqrt(x))+1):
if x % i == 0: return False
return True
ans = 0
for i in range(L, R + 1):
tmp = bin(i)[2:]
if is_prime(tmp.count('1')):
ans += 1
return ans
# version2:
# prime_numbers = {2, 3, 5, 7, 11, 13, 17, 19}
# return sum(1 for num in range(L, R+1) if bin(num).count('1') in prime_numbers)
# sample:
L, R = 6, 10
print(countPrimeSetBits(L, R))