CPP教程-筛法
C++教程
筛法
对应练习:ACWING868
代码1:埃氏筛法
ans//素数个数,
n//上限,
f[1000001]//是否是素数(0是),
void pre(int n) {
f[1] = 1;
for (int i = 2; i <= n; i++) {
if (!f[i]) {
ans++;//计数:质数的个数
for (int j = i * 2; j <= n; j += i)
f[j] = 1;
}
}
}
代码2:线性筛法
ans//素数个数,
n//上限,
p[1000001]//是否是素数(0是),
vis[1000005];
void pre() {
p[1] = 1;
for (int i = 2; i <= n; i++) {
if (!vis[i])
p[++ans] = i; //新的素数,加入素数表
for (int j = 1; i * p[j] <= n; j++) {
vis[i * p[j]] = 1;
if (i % p[j] == 0)
break;
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ocean!
