一个数可以分解为一个素数乘以另一个数。
每个数被其最小的素因子筛去,就是素数线性筛。时间复杂度是O(n)。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 1e5 + 10;
int flag[maxn];
int prim[maxn];
int tot;
void getPrim() {
for(int i = 2; i < maxn; i++) {
if(flag[i] == 0)
prim[tot++] = i;
for(int j = 0; j < tot; j++) {
if(i * prim[j] >= maxn) break;
flag[prim[j] * i] = true;
if(i % prim[j] == 0) break;
}
}
}
int main() {
getPrim();
for(int i = 2; i <= 100; i++)
if(flag[i] == 0)
cout << i << " ";
return 0;
}