将筛法求质数表的函数抄写下来,对其中每个for循环的作用加上注释。在主函数调用时,做一修改,输入某个数N,输出小于N的所有质数,且按照从小到大排序,中间空格隔开。 如 输入:10 输出:2 3 5 7
时间: 2024-10-08 13:20:25 浏览: 45
```c++
#include <iostream>
#include <vector>
using namespace std;
// 函数用于判断是否为质数
bool isPrime(int num) {
if (num <= 1) // 如果数字小于等于1,不是质数
return false;
for (int i = 2; i * i <= num; i++) { // 遍历从2到sqrt(num),因为大于这个范围的因子无需考虑
if (num % i == 0) // 如果num能被i整除,说明num不是质数
return false;
}
return true; // 如果遍历结束都没有找到因子,num就是质数
}
// 使用筛法求解并存储小于N的所有质数
void sieveOfEratosthenes(int N, vector<int>& primes) {
vector<bool> isComposite(N + 1, false); // 初始化一个布尔数组,所有数最初认为是质数
for (int i = 2; i * i <= N; i++) { // 从2开始,逐个检查数
if (!isComposite[i]) { // 如果i是质数
for (int j = i * i; j <= N; j += i) // 则其倍数标记为合数
isComposite[j] = true;
}
}
// 把所有小于N的质数添加到primes列表中
for (int i = 2; i < N; i++) {
if (!isComposite[i])
primes.push_back(i);
}
}
// 主函数,接受用户输入并输出所有质数
int main() {
int N;
cout << "请输入一个正整数N:";
cin >> N;
vector<int> primes;
sieveOfEratosthenes(N, primes);
// 对于输出,先排序质数,然后按指定格式输出
sort(primes.begin(), primes.end()); // 排序
cout << "小于" << N << "的所有质数是:";
for (int i = 0; i < primes.size(); ++i) {
cout << primes[i];
if (i != primes.size() - 1) // 当前不是最后一个元素
cout << " "; // 输出空格分隔
}
cout << endl;
return 0;
}
```
阅读全文