在上一篇文章中,介绍了最基本的素数筛法。
接下来又更简单的一种筛法。
因为有一些合数是多个素数的倍数,那我们就来再将程序的复杂度降低。
const int N = 1e7+1;
int prime[N];
bool b[N];
int cnt = 0, max1 = 1e7;
int prime() {
memset(b, 1, sizeof(b));
b[0] = b[1] = 0;
for (int i = 2; i <= maxl; i ++) {
if (b[i]) {
prime[++cnt] = i;
for (int j = 2; j*i <= maxl; j ++) b[i*j] = 0;
}
}
return 0;
}