762. 二进制表示中质数个计算置位
https://leetcode-cn.com/problems/prime-number-of-set-bits-in-binary-representation/
解法一:
根据提示,数字范围在1~1000000之间,而2^20=1048576>10^6,即20位的二进制可以表示0~1048575之间的任意数,因此不用太花功夫考虑怎么判断质数,只要找出20以内的质数存在集合里,判断是否属于集合即可. 剩下的很简单,对[L, R]的每个数i,每次将i和1进行与操作
class Solution:
def countPrimeSetBits(self, L: int, R: int) -> int:
res = 0
prime = set([2, 3, 5, 7, 11, 13, 17, 19]) #转成set,查找比list快一些
set_bit = 0 #计算置位
for i in range(L, R+1):
set_bit = 0
while i > 0:
set_bit += i & 1
i >>= 1
if set_bit in prime: #查找是否为素数
res += 1
return res
最后更新于