# 【深基7.例2】质数筛 ## 题目描述 输入 $n$ 个不大于 $10^5$ 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 ## 输入格式 第一行输入一个正整数 $n$,表示整数个数。 第二行输入 $n$ 个正整数 $a_i$,以空格隔开。 ## 输出格式 输出一行,依次输出 $a_i$ 中剩余的质数,以空格隔开。 ## 样例 #1 ### 样例输入 #1 ``` 5 3 4 5 6 7 ``` ### 样例输出 #1 ``` 3 5 7 ``` ## 提示 数据保证,$1\le n\le100$,$1 \leq a_i \leq 10^5$。代码
时间: 2024-04-17 11:25:15 浏览: 55
Python例题(一) 输入一个正整数判断是不是素数
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 质数筛
void sieveOfEratosthenes(vector<bool>& isPrime) {
isPrime[0] = false;
isPrime[1] = false;
int n = isPrime.size();
for (int i = 2; i * i < n; i++) {
if (isPrime[i]) {
for (int j = i * i; j < n; j += i) {
isPrime[j] = false;
}
}
}
}
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
vector<bool> isPrime(100001, true);
sieveOfEratosthenes(isPrime);
for (int i = 0; i < n; i++) {
if (isPrime[nums[i]]) {
cout << nums[i] << " ";
}
}
cout << endl;
return 0;
}
```
这段代码会先读取输入的整数个数 `n`,然后读取 `n` 个整数到数组 `nums` 中。接下来,创建一个长度为 $10^5+1$ 的布尔数组 `isPrime`,并使用质数筛的算法将其中的非质数标记为 `false`。最后,遍历 `nums` 数组,输出其中为质数的数字。注意,这里使用了一个辅助函数 `sieveOfEratosthenes` 来实现质数筛。
希望能帮到你!如有任何疑问,请随时问我。
阅读全文