題目連結:
題目意譯:
給定兩整數 L 和 R ,找到 [L, R] 區間(含端點)裡有多少數字其二進位表示法中含有質數個位元是設定位元(Set Bit) 。
(作為提醒,整數的設定位元之數量為二進位表示法中的 1 之數量。例如 21 之二進位為 10101 ,其有 3 個設定位元。還有, 1 不算作質數)
注:
L 、 R 保證 L ≦ R 且為 [1, 10 ^ 6] 範圍中的整數。
R - L 最大為 10000 。
範例測資:
範例 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 間所有數字,然後算出每個數字有多少位元為 1 (這邊可以利用
這題的做法,不過直接掃過每個位元去數也可以),然後判斷該數量是否為質數。如果是計數器(一開始為 0)就 + 1。數字全部跑完後,計數器之值即是所求。
因為給定的數字介於 1 ~ 10 ^ 6 之間,所以最多只會有 19 個位元為 1 ,所以直接找出 1 ~ 19 之間所有的質數,比較方便判斷是不是質數。
而 1 ~ 19 之間只有 2 、 3 、 5 、 7 、 11 、 13 、 17 、 19 這八個質數。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。