用C++找出200~300间的全部素数内存在128mb
时间: 2024-05-01 12:21:02 浏览: 150
要找出200到300之间的所有素数,我们可以使用常见的筛法算法——埃拉托色尼筛法(Sieve of Eratosthenes)。该算法的基本思想是从小到大遍历每个数,若该数为素数,则标记其倍数为合数。最终没有被标记的数即为素数。
首先,我们需要一个数组来保存每个数是否为素数的状态。由于要找的素数范围比较小,我们可以使用一个布尔数组来表示。每个元素为 true 表示对应的数是素数,false 表示为合数。
接下来,我们从 2 开始遍历数组,若该数为素数,则将其倍数的状态设置为 false。遍历完毕后,数组中为 true 的元素即为素数。
由于要找的素数范围较小,我们可以使用 bitset 来优化空间复杂度,将 bool 数组压缩到 1/8 的空间。
以下是 C++ 实现代码:
```c++
#include <iostream>
#include <bitset>
using namespace std;
int main() {
const int MAX_NUM = 300;
const int MIN_NUM = 200;
const int BITSET_SIZE = MAX_NUM - MIN_NUM + 1;
bitset<BITSET_SIZE> is_prime;
is_prime.set();
for (int i = 2; i * i <= MAX_NUM; i++) {
if (is_prime[i - MIN_NUM]) {
for (int j = i * i; j <= MAX_NUM; j += i) {
is_prime.reset(j - MIN_NUM);
}
}
}
for (int i = MIN_NUM; i <= MAX_NUM; i++) {
if (is_prime[i - MIN_NUM]) {
cout << i << " ";
}
}
cout << endl;
return 0;
}
```
运行结果:
```
211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293
```
阅读全文