線性素數篩

2022-05-02 04:00:09 字數 588 閱讀 6652

複雜度o(n)

演算法步驟

1、先初始化number陣列全為true,代表每個數都為素數,(0和1手動修改為false,因為它們很明顯不是素數),然後從數字2開始遍歷(顯然2是素數)

2、將number為true的放入prime陣列中,並使下標+1,然後再遍歷prime,將prime中的數的 i 倍的number改為false,減少後面的判斷,注意邊界條件prime * i <=n

3、注意還有乙個特判條件如果prime能被i整除,即i%prime==0,我們就不再深究下去了,然後重複(2)

#include#include

using

namespace

std;

const

int maxn = 1e6+10;//

***************====

intprime[maxn];

bool

number[maxn];

intn,cnt;

void isprime(int n)

}}int

main()

return0;

}

view code

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

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

素數線性篩

ps 證明 神牛部落格。include include using namespace std const int n 100100 int v n p n n,m,tot int main 首先,先明確乙個條件,任何合數都能表示成一系列素數的積。不管 i 是否是素數,都會執行到 關鍵處1 如果 i...

線性篩素數

如題,給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 輸入格式 第一行包含兩個正整數n m,分別表示查詢的範圍和查詢的個數。接下來m行每行包含乙個不小於1且不大於n的整數,即詢問該數是否為質數。輸出格式 輸出包含m行,每行為yes或no,即依次為每乙個詢問的結果。in...