762 二進位制表示中質數個計算置位

2021-08-19 03:32:43 字數 1041 閱讀 2299

題目描述:

給定兩個整數 l 和 r ,找到閉區間 [l, r] 範圍內,計算置位位數為質數的整數個數。

(注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算置位。還有,1 不是質數。)

示例 1:

輸入: l = 6, r = 10

輸出: 4

解釋:

6 -> 110 (2 個計算置位,2 是質數)

7 -> 111 (3 個計算置位,3 是質數)

9 -> 1001 (2 個計算置位,2 是質數)

10-> 1010 (2 個計算置位,2 是質數)

示例 2:

輸入: l = 10, r = 15

輸出: 5

解釋:

10 -> 1010 (2 個計算置位, 2 是質數)

11 -> 1011 (3 個計算置位, 3 是質數)

12 -> 1100 (2 個計算置位, 2 是質數)

13 -> 1101 (3 個計算置位, 3 是質數)

14 -> 1110 (3 個計算置位, 3 是質數)

15 -> 1111 (4 個計算置位, 4 不是質數)

注意:l, r 是 l <= r 且在 [1, 10^6] 中的整數。

r - l 的最大值為 10000。

題目分析:

第一點:質數的判斷,我使用的是篩選法,即設定布林型標記陣列flag,記錄該書組的下標對應的數字是不是質數。剛開始知道2是質數,那麼2的整數倍都不是質數,然後3的標記是true,說明它是質數,那麼3的整數倍都不是質數。以此類推

第二點:二進位制位數字是不是1的判斷,使用位移和&來加快速度。

class solution 

for(int i=2;i<=32;i++)}}

int ans=0;

for(;l<=r;l++)

}if(flag[cnt]&&cnt!=1)

}return ans;

}};

762 二進位制表示中質數個計算置位(模擬)

1.問題描述 給定兩個整數 l 和 r 找到閉區間 l,r 範圍內,計算置位位數為質數的整數個數。注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算置位。還有,1 不是質數。示例 1 輸入 l 6,r 10 輸出 4 解釋 6 110 2 個計算置位,2...

762 二進位制表示中質數個計算置位 簡單

題目 於力扣 leetcode 目錄三 實現 四 執行用時 五 部分測試用例 762.二進位制表示中質數個計算置位 說明 據題目說明 元素是 10 6 內的值,即 1000000,其二進位制中位 1 的個數最多為 20 位 建立 bucket 陣列,記錄下 20 以內質數索引上元素值為 1 遍歷陣列...

LeetCode762二進位制表示中質數個計算置位

給定兩個整數 l 和 r 找到閉區間 l,r 範圍內,計算置位位數為質數的整數個數。注意,計算置位代表二進位制表示中1的個數。例如 21 的二進位制表示 10101 有 3 個計算置位。還有,1 不是質數。示例 1 輸入 l 6,r 10 輸出 4 解釋 6 110 2 個計算置位,2 是質數 7 ...