我遇到了Eratosthenes篩的分段實現,它承諾運行速度比傳統版本快很多倍。 有人可以解釋如何細分改善運行時間? 請注意,我想查找[1,b]中的素數。分割如何提高Eratosthenes篩的運行時間?
它適用於這樣的觀念:(尋找素數,直到10^9)
我們首先生成這是需要跨斷倍數低於開方篩分素數(10^9) 。然後我們開始交叉第一個素數2的倍數,直到我們達到2> = segment_size的倍數,如果發生這種情況,我們使用(multiple-segment_size)計算下一個分段中該倍數的索引並將其存儲在單獨的數組(下一個[])。然後,我們使用相同的程序將下一個篩選素數的倍數分離。一旦我們將第一個區段中所有篩分素數的倍數交叉,我們遍歷篩選數組並打印(或計數)素數。
爲了篩選下一個段,我們重置篩數組,並且通過segment_size遞增較低的偏移量。然後我們再次啓動渡客的倍數,每個篩分總理,我們從下一個數組檢索篩指標,我們開始穿越過倍數從那裏...
重點是每次篩選一個段(例如32k),而不是所有的數字。這對緩存效果更好。 – 2014-10-05 10:10:14