点击查看代码
void getPrime(long long n, vector<int>& prime, vector<bool>& isPrime) {
isPrime[1] = false;
for (int i = 2; i < n; ++i) {
if (isPrime[i]) {
prime.emplace_back(i);
}
for (const int& p : prime) {
if (p * i > n) break;
isPrime[p*i] = false;
if (i % p == 0) break;
}
}
return;
}
n:isPrime 数组的大小
prime:待生成的素数向量
isPrime:已经分配好空间的 bool 向量,表示是否是素数
流程:
- 如果是素数的话,加入到 prime 中
- 无论当前是否是素数,都将对当前的 prime 数组进行遍历,将 prime[j] * i 设置成 false,直至 i % prime[j] == 0 为止
时间复杂度为 O(N)