利用c++输出1~n的质数和(n从键盘输入)
时间: 2024-09-12 12:09:23 浏览: 53
利用c++语言来输出1-100之间的所有素数.rar
在C++中,我们可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)来找出1到n之间的所有质数,并计算它们的和。这是一种高效的算法,步骤大致如下:
1. 创建一个布尔数组isPrime,大小为n+1,初始值全设为true,表示所有数字都是质数。
2. 遍历数组,从2开始(因为1不是质数),如果isPrime[i]为true,则i是一个质数,将它的倍数(除了本身)标记为非质数,即isPrime[j * i]设为false。
3. 最后遍历isPrime数组,累计所有的true值对应的索引(即质数),并加起来得到质数之和。
以下是示例代码:
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cout << "请输入一个正整数n: ";
cin >> n;
bool isPrime[n + 1];
for (int i = 0; i <= n; i++) {
isPrime[i] = true;
}
for (int i = 2; i * i <= n; i++) { // 只需检查到√n
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false; // 标记非质数
}
}
}
int primeSum = 0;
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
primeSum += i;
cout << i << " "; // 输出质数
}
}
cout << "\n1到" << n << "的质数之和为: " << primeSum << endl;
return 0;
}
```
阅读全文