m,n包括端点之间所有素数的和c++源码
时间: 2024-12-08 17:19:22 浏览: 11
在C++中计算从m到n(包含端点)之间的所有素数之和,你需要用到一些算法技巧和库函数,如Sieve of Eratosthenes用于查找素数。下面是一个简单的示例代码,使用了`<vector>`容器和`#include <iostream>`:
```cpp
#include <iostream>
#include <vector>
bool isPrime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return false;
}
return true;
}
int sumOfPrimes(int m, int n) {
std::vector<bool> primes(n + 1, true); // 初始化为所有数都是质数
primes[0] = primes[1] = false;
for (int i = 2; i * i <= n; i++) { // 根据Sieve原理去除合数
if (primes[i]) {
for (int j = i * i; j <= n; j += i)
primes[j] = false;
}
}
int sum = 0;
for (int i = m; i <= n; ++i) {
if (primes[i])
sum += i;
}
return sum;
}
int main() {
int m, n;
std::cout << "请输入起始和结束值(m <= n): ";
std::cin >> m >> n;
if (m > n) {
std::cerr << "错误:起始值必须小于或等于结束值。\n";
return 1;
}
int result = sumOfPrimes(m, n);
std::cout << "从" << m << "到" << n << "之间所有素数的和是: " << result << std::endl;
return 0;
}
```
在这个代码中,我们首先创建了一个布尔数组表示每个数字是否为素数,然后使用埃拉托斯特尼筛法消除非素数。最后计算给定范围内的素数总和并返回结果。
阅读全文