質數 篩質數

2021-10-03 06:54:08 字數 784 閱讀 4012

質數定理:

1~n中質數有n/ln(n)個質數

按順序刪除每個數的倍數,最後剩下的就是質數。

給定乙個正整數n,請你求出1~n中質數的個數。

輸入格式

共一行,包含整數n。

輸出格式

共一行,包含乙個整數,表示1~n中質數的個數。

資料範圍

1≤n≤1061≤n≤106

輸入樣例:

8
輸出樣例:

4
#include #include using namespace std;

const int n = 1000010;

int primes[n], cnt;

bool st[n];

//樸素做法

void get_primes(int n)

}//埃式篩法-o(nloglogn)

void get_primes(int n)

} }//線性篩法-o(n), n = 1e7的時候基本就比埃式篩法快一倍了

//演算法核心:x僅會被其最小質因子篩去

void get_prime(int x)

3 篩質數 質數

篩質數的核心思想 先把所有數放進乙個陣列 然後從前往後看,把每乙個數的倍數刪掉 第乙個數是2,就把所有2的倍數刪掉,4,6,8,10,12 第二個數是3,就把所有3的倍數刪掉,6,9,12 第二個數是4,就把所有4的倍數刪掉,8,12 第二個數是5,就把所有5的倍數刪掉,10 以此類推 這樣篩完之後...

質數中的質數(質數篩法)

如果乙個質數,在質數列表中的編號也是質數,那麼就稱之為質數中的質數。例如 3 5分別是排第2和第3的質數,所以他們是質數中的質數。現在給出乙個數n,求 n的最小的質數中的質數是多少 可以考慮用質數篩法來做 input 輸入乙個數n n 10 6 output 輸出 n的最小的質數中的質數。input...

判斷質數與篩質數

一 判定質數 要判斷乙個數是不是質數,只需遍歷小於等於它的所有數,如果它能被除了1和本身之外的數整除,那麼它就不是質數。很簡單,暴力列舉,如下 1 bool is prime intx 2 但是還可以優化,對於乙個數 x 它有乙個約數 d 那麼 frac 也是 x 的約數,所以我們只需要列舉較小的乙...