線性篩 一般篩

2021-07-25 13:41:50 字數 903 閱讀 8966

一般篩,每個數被篩次數會出現》1,複雜度近似於o(nloglogn):

//一般篩

var vis:array[0..1000005]of boolean;

i,j,n:longint;

begin

assign(input,'xxs.in');reset(input);

assign(output,'xxs.out');rewrite(output);

fillchar(vis,sizeof(vis),1);

readln(n);

for i:=2 to trunc(sqrt(n)) do

if vis[i] then

for j:=2 to n div i do vis[i*j]:=false;

for i:=2 to n do

if vis[i] then writeln(i);

close(input);close(output);

end.

線性篩,關鍵在於if (i%prime[j]==0) break,就避免了乙個數被重複篩,複雜度o(n):

//線性篩 

#include#includeint prime[1000005];

int n,cnt;

bool vis[1000005];

using namespace std;

int main()

} for (int i=1;i<=cnt;i++) printf("%d\n",prime[i]);

return 0;

}

【寫的有漏洞的,歡迎路過大神吐槽】

2016/12/22 17:40:40

ending.

一般篩法求素數 快速線性篩法求素數

素數總是乙個比較常涉及到的內容,掌握求素數的方法是一項基本功。基本原則就是題目如果只需要判斷少量數字是否為素數,直接列舉因子2 n 0.數 5 看看能否整除n。如果需要判斷的次數較多,則先用下面介紹的辦法預處理。首先先介紹一般的線性篩法求素數 void make prime num prime 0 ...

一般篩法求素數 快速線性篩法求素數

tag 素數 數論 素數總是乙個比較常涉及到的內容,掌握求素數的方法是一項基本功。基本原則就是題目如果只需要判斷少量數字是否為素數,直接列舉因子2 n 0.5 看看能否整除n。如果需要判斷的次數較多,則先用下面介紹的辦法預處理。首先先介紹一般的線性篩法求素數 void make prime num ...

一般篩法求素數 快速線性篩法求素數

素數總是乙個比較常涉及到的內容,掌握求素數的方法是一項基本功。基本原則就是題目如果只需要判斷少量數字是否為素數,直接列舉因子2 n 0.5 看看能否整除n。如果需要判斷的次數較多,則先用下面介紹的辦法預處理。首先先介紹一般的線性篩法求素數 cpp view plain copy void make ...