劃掉操作數:0
目前 p:-
綠色(prime)為已確認的質數;灰色刪除線(crossed)為已被劃掉的合數格。
統計數字為「劃掉操作數」,並非唯一合數個數——同一個合數可能被多個不同質數各劃一次
(例如 30 會分別被 2、3、5 劃掉各一次),因此劃掉操作數會大於實際合數個數。
電腦處理數字時常需要幾樣「底層基本功」:找出質數、求兩數的最大公因數、數一個數的二進位裡亮著幾個 1。這頁把三招最經典的技巧擺在一起:質數篩像在點名冊上把每個號碼的倍數一個個劃掉,最後沒被劃到的就是質數;輾轉相除法像拿長短兩根繩子反覆截去較短的那一段,剩下的長度就是能同時整除兩數的最大單位;數 1 位元則靠一個巧招,每次一口氣抹掉最右邊那個 1。下面你會看到三者各自的動畫與逐步過程。
三個數論與位元操作的基礎技巧:
初始化 1..n 全部視為候選質數;p 從 2 到 √n,若 p 尚未被劃掉即為質數,劃掉 p² 起、間隔 p 的所有倍數(合數); p 迴圈結束後,掃尾把 √n 以上仍未被劃掉的數字一併加入質數清單。
建立步驟表 [a, b, a mod b];只要 b ≠ 0,就計算 r = a mod b,並把 (a, b) 更新為 (b, r) 再新增一列; 當 b = 0 時迴圈結束,此時的 a 即為兩數的最大公因數。
只要 n ≠ 0,就令 n ← n & (n-1),每次恰好清除最低位的 1,count 加一;當 n 歸零時,count 即為原始 二進位中 1 的個數。迭代次數等於 1 的個數 k,比逐位元檢查更快。