素數判定,素數篩

2021-09-27 02:38:20 字數 676 閱讀 9710

這些零碎的知識點每個都學過n次了,但隔一段時間就會忘,記錄下來

素數定義:只能被自身和1整除的大於1的正整數

通過這個定義,我們就可以得出判斷素數的

這裡用到了cmath中的sqrt函式,其原型為double sqrt(double);

所以在取上界的時候,為了避免double帶來的精度丟失,寧可多列舉乙個也不能少乙個,bound = (int)sqrt(n)+1;

bool isprime

(int x)

return true;

}

但上述方法判斷某個數是素數的複雜度還可以,但要是判斷從1到n的所有數是否為素數,那就複雜度太高了o(n*sqrt(n))

#define maxn ...

bool isprime[maxn]

;void

judge

(void)}

//把素數放在乙個陣列中,並且可以求有多少個

int prime[maxn]

;int sum =0;

for(

int i =

1;i<=maxn;i++)if

(isprime[i]

) prime[sum++

]= i;

素數判定(素數篩法)(尤拉)

這裡主要說一下素數篩法,該方法可以快速的選取出1 n數字中的所有素數。時間複雜度遠小於o n sqrt n 方法為 從2開始,往後所有素數的倍數都不是素數。最後剩下的數都是素數。再說說尤拉公式,用來解決所有小於n中的數字有多少個與n互質,用 n 表示。n n 1 1 q1 1 1 q2 1 1 qk...

素數篩法(素數篩 線性篩)

求素數的方法在現階段可以總結為三種 這種方法最為簡單但效率太低,經過優化時間複雜度最低是o n sqrt n 輸入乙個n,輸出n以內所有素數 include intprime int n if flag 0 優化 printf d i intmain 素數篩法原理 2是素數,那麼2的所有倍數都是合數...

素數與素數篩

素數篩法 線性篩法 啊,耳熟能詳。素數又稱質數,乙個大於1 11的自然數,除了1 11和它本身外,不能被其他自然數整除,換句話說就是該數除了1 11和它本身以外不再有其他的因數 否則稱為合數。啊!1 11不是素數啊 啊,也耳熟能詳了,暴力列舉一下除1 11和本身的自然數是否會被整除。bool is ...