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.定義 埃拉託斯特尼...