素数筛法代码如下
#define MAX 10000
int prime[MAX]; //保存筛得的素数
int primeSize; //保存素数的个数
bool mark[MAX + 1]; //若mark[x]为true,则表示该数x已被标记成非素数
void init() {
for (int i = 0; i <= MAX; i++) { //初始化,所有数字都没被标记
mark[i] = false;
}
primeSize = 0; //得到素数个数为0
for (int i = 2; i <= MAX; i++) { //遍历从2至MAX范围内所有数字
if (mark[i] == true) continue; // 若该数字标记过则跳过
prime[primeSize++] = i; //否则得到新素数
for (int j = i * i; j <= MAX; j += i) { //将该数所有倍数标记为非素数
mark[j] = true;
}
}
}