如何使用C++编程来计算并输出两个给定正整数之间的素数个数以及它们的总和?
时间: 2024-12-15 09:22:47 浏览: 9
在C++中,我们可以采用埃拉托斯特尼筛法(Sieve of Eratosthenes)来找出指定范围内的所有素数。以下是步骤:
1. **初始化数组**:创建一个布尔型数组isPrime,大小等于给定的最大数加一,初始值全部设置为true,表示每个数字都是潜在的素数。
2. **筛选素数**:从2开始,对于每一个素数(已知的),将其倍数的isPrime标记为false。例如,如果发现2是素数,那么4、6、8...等都不能是素数。
3. **计数和累加**:遍历整个isPrime数组,在索引i处记录有素数的情况。同时,将素数累加到总和sum中。
4. **输出结果**:最后,打印出找到的素数个数(非零元素的数量)以及它们的总和。
下面是简单的C++代码实现:
```cpp
#include <iostream>
#include <vector>
int main() {
int start, end;
std::cout << "请输入两个正整数(起始和结束): ";
std::cin >> start >> end;
if (start > end) { // 检查输入是否合理
std::cout << "错误! 起始数值不能大于结束数值。\n";
return -1;
}
std::vector<bool> isPrime(end + 1, true);
isPrime[0] = isPrime[1] = false; // 0和1不是素数
for (int i = 2; i * i <= end; ++i) {
if (isPrime[i]) {
for (int j = i * i; j <= end; j += i)
isPrime[j] = false;
}
}
int primeCount = 0;
long long sum = 0;
for (int i = start; i <= end; ++i) {
if (isPrime[i])
++primeCount, sum += i;
}
std::cout << "在区间[" << start << ", " << end << "]内,素数的个数是:" << primeCount << "\n";
std::cout << "这些素数的总和是:" << sum << "\n";
return 0;
}
阅读全文