前往
大廳
主題

LeetCode - 762. Prime Number of Set Bits in Binary Representation 解題心得

Not In My Back Yard | 2021-01-09 00:00:08 | 巴幣 0 | 人氣 250

題目連結:


題目意譯:
給定兩整數 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 這八個質數。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

Absinthe
請問 10^6 怎麼快速知道至多 19 個 ㄖ1
2022-10-12 21:32:26
Not In My Back Yard
因為 10 ^ 6 < 2 ^ 20 - 1 = 1,048,575。
而 2 ^ 20 - 1 也就是 20 個位元可以表示的最大整數,因此 0 ~ 10 ^ 6 之間沒有任何一個數字滿足有 20 個位元是 1 的(因為如果有的話,它至少要大於或等於 1,048,575)。

不過 0 ~ 10 ^ 6 之間是存在數字有著 19 個位元是 1 的,即 524,288。
2022-10-12 21:54:29
Not In My Back Yard
希望這樣有回答到你的問題。
2022-10-12 21:55:32
Absinthe
謝謝您的回覆 原理我理解 但我真正想知道的是如何快速估算,畢竟平常不太會去背 2^20 是多少,或是可以用 1024×1024 -1 > 1000*1000,而 2^20 -1 可表示 20 bits,至多 20 個 1
2022-10-13 09:45:16
Not In My Back Yard
計算的方式很多,不是只有我的方法。例如說還有下列方式:
一:直接除。看 10 ^ 6(或是推廣成任意的 N 值)除幾次 2 才會小於 1(基本上過程跟轉成二進位一模一樣)。

二:用對數函數。已知換底公式 log_a(b) =(log_x(b)) / (log_x(a))(因為排版,所以只能用「_a」來表示以 a 為底),則我們可以算出 log_2(10 ^ 6) = (log_10(10 ^ 6)) / log_10(2) ≒ 6 / 0.3010 < 20。
2022-10-13 17:14:09
Not In My Back Yard
基本上就是看你習慣就好。
2022-10-13 17:14:23
Absinthe
故 2^20 次方所能表示的質數個 bits,最大就是到 19。不過我想若 constrain 再拉大,一個 integer type 至多也才 32 個 bits,所以正常 signed int 的情況下,至多就是列出所有小於 32 的質數,似乎也不會太費事,面對變化題應該可以從這樣的觀點來思考
2022-10-13 09:49:50
Absinthe
了解 非常感謝你的解說
2022-10-15 00:48:56

相關創作

更多創作