艾氏篩選法篩選素數

2021-08-29 02:00:33 字數 860 閱讀 4042

const int maxn = 700000;    //1 到10000007共有60萬多個素數

const int maxnu = 10000007; //整數範圍內

bool is_prime[maxn]; //判斷是否為素數

int prime[maxnu]; //儲存素數

int p; //儲存素數的個數

void seive()

}

經典題目 sdnu上面的求最大公約數變形

/*已知

a = x * b;

c = y * b;

x > y;

x % y != 0;

則所求為:

從1到sqrt(a / b)找最小的乙個(a / b)除不盡的素數 y;

證明:1.如果x是素數,則y = 2;在0 到sqrt(x)範圍內

2.如果x不是素數,則在0 到sqrt(x)範圍內有至少乙個y會除x不餘0(想一下為什麼)

*/

#include#includeusing namespace std;

typedef long long ll;

const int maxn = 700000;

const int maxnu = 10000007;

bool is_prime[maxnu];

int prime[maxn];

int p = 0;

//素數篩選

void is_prime()

}}int main()

}printf("%i64d\n",y * b);

}return 0;

}

質數篩選 素數篩選法

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...

埃氏篩選法

思想 假設全部數均為素數,再通過剔除掉所有合數,剩下的數肯定為素數 數學原理 任何正整數 除1外 所有正整數均能分解為素數的乘積。用途 快速找1 k中所有素數 優化 對於乙個合數k,必能在 2,sqrt k 區間找到乙個素數因子 1 k中,合數k最大,選取的因子區間 2,sqrt k 包含了其他數a...

埃氏篩選法

1.引例 博主第一次見到這個演算法是在兩個周以前,因為團隊要求提前回來培訓資料結構,所以過完元宵節沒幾天,便匆忙往學校趕,無奈囊中羞澀,只能訂半夜的機票,下了飛機取完行李後,便坐在旁邊的椅子上,像成功人士一般拿出電腦學習,等待著第一班地鐵,無意中看到這個演算法,便開始研究起來。2.定義 埃拉託斯特尼...