O n 線性篩選n以內的素數

2022-05-17 13:52:25 字數 907 閱讀 8536

o(n)線性篩選n以內的素數

(1)對於任何乙個素數p,都不可能表示為兩個數的乘積

(2)對於任何乙個合數m = p1

a1p2

a2…pm

am,這裡p1

< p2

< … m,都能使用p1

a1-1p2

a2…pm

am* p1進行篩選

1 fillchar(prime,sizeof(prime),1

);2 prime[1]:=false;

3 fillchar(p,sizeof(p),0

);4 total:=0;5

for i:=2

to n do

6begin

7if prime[i] then

begin inc(total);p[total]:=i;end;8

for j:=1

to total do

9begin

10if p[j]*i>n then

break;

11 prime[p[j]*i]:=false;

12if i mod p[j]=0 then break;13

end;

14end;15

for i:=1

to total do

writeln(p[i]);

以下為略過偶數的線性篩選,速度還能提高一半。

題解 篩選N以內的素數

題目描述 用簡單素數篩選法求n以內的素數。輸入 n 輸出2 n 的素數 樣例輸入 30樣例輸出23 571113 1719 2329 題解 首先先解釋一下素數是什麼?素數一般指質數,質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。在一般領域,對正整數n,如果用2到n的開方之間的...

篩選法求n以內素數(質數)

設定乙個標誌陣列isprime,isprime i 的值是1就表示i是素數。開始陣列元素值全部為1劃掉k的倍數,就是把isprime 2 k isprime 3 k 置成0最後檢查isprime陣列,輸出isprime i 為1的那些i include include using namespace...

使用篩選法求N以內的素數

1.使用篩選法求素數的思想是 使用乙個bool isprime n 來儲存乙個數是不是素數的標誌位。首先偶數不是素數 2除外 將2的倍數isprime全部設定為false。i從3開始遍歷,如果i為素數,則將i的倍數isprime全部設定成false。這樣就篩選掉了好多不是素數的數。從0遍歷ispri...