再習尤拉 線性 篩素數

2021-08-29 18:30:14 字數 362 閱讀 6859

尤拉篩,是一種可以o(n)篩出1~n範圍內的素數的篩法,比*****篩的o(nlogn),埃式篩的o(nloglogn)都要快一些,還可以根據題目搞出一些最大約數啊之類的東西

**:void euler_pick(int n)}}

p是用於儲存素數的

相信你可能對於"i%p[j]==0,break"這句話有疑問

首先你要知道,尤拉篩的核心是保證每個合數,只會被最小的質因子篩掉。

我們可以這樣來想,在篩掉p1*i後,我們會判斷i的約數裡面是否有p[1]。

假如有p[1]的話,如果此時我們執行j++而不是break,我們會發現,p[2]就不是i*p[2]的最小質因子了,因為i的約數里有p[1],而p[1]這樣一想就好了

線性篩素數(尤拉篩)

尤拉篩是o n 複雜度的篩素數演算法,1秒內埃篩能處理1e6的資料,而1e7的資料就必須用尤拉篩了。埃篩的基本思想是 素數的倍數一定是合數。尤拉篩基本思想是 任何數與素數的乘積一定是合數 演算法概述 遍歷 2,n 的所有數i,內層迴圈遍歷已經找到的素數prime j 將i prime j 標記為合數...

素數線性篩法(尤拉篩)

之前寫的埃式篩法複雜度達o n log n lo gn o n logn logn o n lo gn l ogn 在大數字的時候可能複雜度還不夠理想。這種做法對於乙個合數有可能會篩了多次,導致重複做功。引入尤拉篩法能夠解決這種多次篩同乙個數字的情況,理論演算法複雜度o n o n o n 精髓在於...

素數線性篩 尤拉Euler篩

prime陣列中的素數是遞增的,當i能整除prime j 那麼i prime j 1 這個合數肯定被prime j 乘以某個數篩掉。因為i中含有prime j prime j 比prime j 1 小,即i k prime j 那麼i prime j 1 k prime j prime j 1 k ...