素數篩選模板

2021-08-29 23:14:30 字數 571 閱讀 7130

首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去……以此類推,如果表中剩餘的最小的數是m,那麼m就是素數。然後將表中所有m的倍數劃去,像這樣反覆操作,就能依次列舉n以內的素數,這樣的時間複雜度是o(nloglogn)。

memset(check, 0, sizeof(check)); //check為0代表素數,1代表非素數

int tot = 0;

for (int i = 2; i <= n; ++i)

for (int j = i+i; j <= n; j += i)

}

每個合數只會被它的最小質因數篩去,因此每個數隻會被標記一次,所以時間複雜度是o(n)

const int maxn = 10000;

int prime[maxn+1];

bool is_pri[maxn*100];

int tot;

void getprime()

}}

線性篩選素數(模板)

今天hz大神回來給我們上課,首先講了線性篩選素數,就先做個記錄吧 以一道模板題為例子 洛谷題號 p3383 模板 線性篩素數 題目描述 如題,給定乙個範圍n,你需要處理m個某數字是否為質數的詢問 每個數字均在範圍1 n內 輸入輸出格式 輸入格式 第一行包含兩個正整數n m,分別表示查詢的範圍和查詢的...

素數篩選法(線性篩法模板)

include using namespace std const int n 1e7 bool flag n 10 int prime n 10 int main return0 include using namespace std typedef long long ll int prime ...

質數篩選 素數篩選法

int prime 100010 void prime for int i 1 i i 1000000 i define size 1000000 int main 元素值為0代表是素數 int prime size int pos 0 int flag for int i 2 i size i p...