一般篩,每個數被篩次數會出現》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 ...