c++求不大于n的所有素数之和
时间: 2024-10-12 17:07:27 浏览: 33
在C++中计算不大于给定整数n的所有素数之和,可以采用埃拉托斯特尼筛法(Sieve of Eratosthenes)。这个算法通过遍历从2到n,将每个素数标记出来,然后累加这些素数得到总和。以下是简单的步骤:
1. 创建一个大小为n+1的布尔数组isPrime,初始化所有元素为true,表示所有数字都是候选素数。
2. 从2开始(因为最小的质数是2),遍历到sqrt(n),对于每一个素数p:
a. 如果isPrime[p]为true,说明它是一个素数,将它的倍数(除了本身)设置为非素数,即isPrime[i*p]设为false。
3. 遍历isPrime数组,将所有的true索引对应的值加起来,就是所有小于等于n的素数之和。
下面是一个简单的C++函数示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int sumOfPrimes(int n) {
vector<bool> isPrime(n + 1, true);
int sum = 0;
for (int p = 2; p * p <= n; ++p) {
if (isPrime[p]) {
// 素数倍数标记为非素数
for (int i = p * p; i <= n; i += p)
isPrime[i] = false;
sum += p; // 统计并累加素数
}
}
return sum;
}
int main() {
int n;
cout << "Enter a number: ";
cin >> n;
cout << "Sum of all primes less than or equal to " << n << " is: " << sumOfPrimes(n) << endl;
return 0;
}
```
阅读全文