Eratosthenes Seive
计算\(\pi(x)和打质数表\)
code:
#include<cstdio>
#include<vector>
using std::vector;
int seive(vector<int>& prime, const int& x) {
bool* A = new bool[x + 1];
for (int i = 2; i <= x; i++)A[i] = 1;
for (int p = 2; p * p <= x; p++)if (A[p])for (int i = p * p; i <= x; i += p)A[i] = 0;
int pi = 0;
for (int i = 2; i <= x; i++) if(A[i]){
prime.push_back(i);
++pi;
}
delete[] A;
return pi;
}
int main() {
int x;
vector<int>prime;
scanf("%d", &x);
printf("%d\n", seive(prime, x));
for (auto& p : prime)printf("%d ", p);
}