模版-线性筛素数
#include <cstdio>
#include <cstring>
const int Maxn = 100000005;
int isPrime[Maxn], Prime[1000005], cnt = 0;
void getPrime(int n) {
isPrime[0] = isPrime[1] = true;
for (int i = 2; i <= n; i++) {
if (!isPrime[i]) {
Prime[cnt++] = i;
}
for (int j = 0; j < cnt && Prime[j] * i <= n; j++) {
isPrime[Prime[j] * i] = true;
if (i % Prime[j] == 0) {
break;
}
}
}
}
int main() {
int n;
scanf("%d", &n);
getPrime(n);
for (int i = 0; i < cnt; i++) {
printf("%d%c", Prime[i], " \n"[i == n - 1]);
}
printf("%d\n", cnt);
return 0;
}