埃式篩與尤拉篩

2021-10-21 11:01:48 字數 835 閱讀 8774

核心思想:每個質數的倍數都是合數,當發現乙個質數時就將其的倍數都變成合數。

缺點:有的合數會被它的幾個質因子重複篩掉,造成了時間上的浪費。

#include

#include

using

namespace std;

int n, q, cnt, k;

bool isprime[

100000005];

int sushu[

1000005];

voidai(

int n)}}

return;}

intmain()

return0;

}

核心思想:與埃式篩整體大同,但卻能保證每個合數都能被他最大或最小的質因子篩去,從而將時間縮到最短。

#include

using

namespace std;

int n, q, cnt, k;

bool isprime[

100000005];

int sushu[

10005];

void

ola(

int n)

for(

int j=

1;j<=cnt && sushu[j]

*i<=n;j++)}

return;}

intmain()

return0;

}

模板題** 洛谷p3383

埃式篩法 尤拉篩法

埃氏篩法是通過從小到大篩去乙個已知素數的倍數進而實現篩選的。假如我們想篩掉1 100間的所有合數,步驟如下 2是質數,篩掉所有2的倍數 3是質數,篩掉所有3的倍數 4不是質數,跳過 5是質數,篩掉所有5的倍數 6不是質數,跳過 7是質數,篩掉所有7的倍數 8不是質數,跳過 9不是質數,跳過 10不是...

埃氏篩 尤拉篩

對於1 n範圍內素數的查詢,我們常用的二重迴圈暴力演算法的複雜度是o n2 如果利用開根縮小範圍的時間複雜度也無非是在o n nn sqrt n nn 而,這些演算法對於n在105以內都是可以接受的,但是如果需要更大範圍的素數表,這些演算法將顯得力不從心。下面將介紹更加高效的演算法。埃氏篩也叫素數篩...

演算法筆記 素數篩(樸素篩,埃式篩,尤拉篩)

素數也叫質數,是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。如2 3 5 7 11等。素數篩即篩選出1 n內的素數的方法,這裡介紹三種 由上面的概念得,我們可以想到引入乙個從1到它本身的for迴圈,只要中間有取余為0,那麼它就不是素數。define max 100000 int ...