1. 程式人生 > >[LeetCode] Prime Number of Set Bits in Binary Representation

[LeetCode] Prime Number of Set Bits in Binary Representation

pri return not prim 統計 all bits clu leet

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.)

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].
  2. R - L will be at most 10000.

找出從L到R中數字的二進制中1的個數是否是質數的數字。並統計L到R中這樣的數字的個數。

思路:

1、判斷一個數是否為質數

2、判斷一個 數字的二進制位中有多少個1

3、循環判斷L~R中的每一個數,並統計

class Solution {
public:
    int countPrimeSetBits(int L, int R) {
        int res = 0;
        for (int i = L; i <= R; i++) {
            
int cnt = countBits(i); if (isPrime(cnt)) res++; } return res; } int countBits(int num) { int res = 0; while (num) { if (num & 1) res++; num = num >> 1; } return res; } bool isPrime(int num) { if (num <= 3) return num > 1; for (int i = 2; i <= sqrt(num); i++) { if (num % i == 0) return false; } return true; } }; // 23 ms

[LeetCode] Prime Number of Set Bits in Binary Representation