目录
- [1 基础知识](#1 基础知识)
- [2 模板](#2 模板)
- [3 工程化](#3 工程化)
1 基础知识
核心思想:把2~n中的非质数打上标记(也即,筛掉),剩余的就是质数。
一般做法:
cpp
int primes[N]; //存储所有的质数
int st[N]; //存储是否被排除
int cnt;
int n;
void f() {
for (int i = 2; i <= n; ++i) {
if (!st[i]) {
primes[cnt++] = i;
for (int j = i + i; j <= n; j += i) {
st[j] = true;
}
}
}
//输出小于等于n的所有质数
for (int i = 0; i < cnt; ++i) cout << primes[i] << " ";
cout << endl;
return;
}
线性筛选质数的方法,它的核心思想:非质数,只会被它的最小质因子筛掉。
cpp
int n, cnt;
int primes[N];
bool st[N];
void f() {
for (int i = 2; i <= n; ++i) {
if (!st[i]) primes[cnt++] = i;
for (int j = 0; primes[j] <= n / i; ++j) {
st[primes[j] * i] = true;
if (i % primes[j] == 0) break;
}
}
//输出所有质数
for (int i = 0; i < cnt; ++i) cout << primes[i] << " ";
cout << endl;
return;
}
2 模板
暂无。。。
3 工程化
暂无。。。