埃氏篩選法

2021-08-18 04:18:46 字數 531 閱讀 6549

思想:假設全部數均為素數,再通過剔除掉所有合數,剩下的數肯定為素數;

數學原理:任何正整數(除1外),所有正整數均能分解為素數的乘積。

用途:快速找1~k中所有素數;

優化:對於乙個合數k,必能在 [2,sqrt(k)]區間找到乙個素數因子; 

1~k中,合數k最大,選取的因子區間[2,sqrt(k)]包含了其他數a的因子區間[2,sqrt(a)].

tip:我們不是去找某個數的素數因子,而是通過素數因子來判斷一堆數是不是合數

memset(num,1,sizeof num);

int r = sqrt(n);

num[1] = 0 ;

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

第二個for迴圈是i*i :加快速度阿...i的 2~i-1倍 都已經在之前掃過了

例題:傳送門

埃氏篩選法

1.引例 博主第一次見到這個演算法是在兩個周以前,因為團隊要求提前回來培訓資料結構,所以過完元宵節沒幾天,便匆忙往學校趕,無奈囊中羞澀,只能訂半夜的機票,下了飛機取完行李後,便坐在旁邊的椅子上,像成功人士一般拿出電腦學習,等待著第一班地鐵,無意中看到這個演算法,便開始研究起來。2.定義 埃拉託斯特尼...

埃氏篩法 素數的快速篩選

埃氏篩法的的核心是 素數的倍數都不是素數。那我們執行這樣乙個策略,我們可以確定的是 2 是最小的素數,建立乙個表並將除了 0 1 外的所有數標記為素數,我們將篩選範圍內的 2 的倍數全部標記為合數 非素數 然後取出表中最小的素數,執行相同的策略 講素數的倍數標記為非素數 下圖可以完美的演示這樣乙個演...

素數的快速篩選(埃氏篩法)

要列舉n以內的素數,可以用埃氏篩法。這是乙個與輾轉相除法一樣古老的演算法。首先,將2到n範圍內的所有整數寫下來。其中最小的數字2是素數。將表中所有2的倍數都劃去。表中剩餘的最小數字是3,它不能被更小的數整除,所以是素數。再將表中所有3的倍數全都劃去。依次類推,如果表中剩餘的最小數字是m時,m就是素數...