篩選法尋找素數 學習筆記

2021-08-28 02:18:36 字數 597 閱讀 4284

給定數字n,要求找到小於n的所有素數的個數。

我們需要對小於n的每個數x進行判斷,判斷是否為素數。

我們可以在[2,x-1]之間找x的因素,也可以在[2,sqrt(x)]之間找,當然平方根內查詢速度更快。

我來介紹一種更快的方法——篩選法。時間複雜度o(nlog(logn))。

篩選法原理在於:

1.先建立乙個長度為n的陣列(陣列下標正好對應[0,n-1]),先假設每乙個數都可能是素數

2.然後從2開始(0,1均不是素數)往後找,每當找到乙個素數y時,就把y所有倍數ky(k=2,3,4,,,,(ky3.由於素數的倍數都排除掉了(非素數除了0,1以外均由素數因子構成),最後剩下的就是素數了

看**:

//返回值n以內素數的個數

int prime(int n)

//列印素數

printf("the %d prime:%d\n",++count,i);

//排除素數的倍數

for(int j=i+i;j}

//釋放記憶體,返回

free(prime);

return count;

}

素數篩選法

篩選素數法 搞acm的都知道,素數是數論中必不可少的知識,也是必須要掌握的,關於素數的篩選有好幾種方法,下面一一道來,寫的不好還請提出。第一種是最常規的做法 int main if j sqrt i cout 這種方法肯定是比第一種快的,至於快多少大家可以比較一下,注意到裡面的for迴圈是到sqrt...

素數篩選法

素數篩選法差不多是打標,用前面確定的質數篩選掉後面的合數,然後遍歷下來所有的合數都被篩選掉了,剩下的都是素數。int vis maxn for int i 2 i n i for int j i 2 j n j i vis j 1 這是沒有優化的素數篩選法,也已經很快了,時間複雜度是n log n。...

素數篩選法

素數,是指因子只包含1和其本身的數,那麼,我們怎麼判斷素數呢?以下 均基於打表 1 1e6 的基礎上完成 素數的定義就是乙個數的因子只包含1和其本身,那麼我們直接就按照定義寫 include include define maxn 1000000 10 int pri maxn int isprim...