python leetcode 762. Prime Number of Set Bits in Binary Representation

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 1s present when written in binary. For example, 21 written in binary is 10101 which has 3 set bits. Also, 1 is not a prime.)

给定两个整数L和R,找到[L,R](含)范围内的数字的计数,其二进制表示中具有设置位的素数。一个素数的设定为其二进制中所存在的‘1’的个数是否为素数。

注意python中int型总共32位,所以只需要枚举出<32的素数的集合,即:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31。


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:

  1. L, R will be integers L <= R in the range [1, 10^6].

  1. R - L will be at most 10000.

class Solution:
    def countPrimeSetBits(self, L, R):
        """
        :type L: int
        :type R: int
        :rtype: int
        """
        ans = 0
        prime = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
        for each in range(L, R + 1):
            num = bin(each)
            cnt = num.count('1')
            if cnt in prime:
                ans += 1
        return ans

猜你喜欢

转载自blog.csdn.net/DreamerLHQ/article/details/80208641