取两个正整数M和N(1<=M<=N<=500)统计M到N这个区间内的素数个数并求和
时间: 2024-11-09 08:28:39 浏览: 43
要计算从M到N范围内的所有素数(质数)个数并求和,我们可以使用一种常见的算法,即埃拉托斯特尼筛法(Sieve of Eratosthenes)。这是一种用于找出一定范围内所有质数的有效方法。以下是一个简单的C++程序示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
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;
}
// 使用埃拉托斯特尼筛法找出所有M到N之间的素数
void countAndSumPrimes(int M, int N, vector<int>& primes) {
vector<bool> isComposite(N + 1, false);
for (int i = 2; i * i <= N; ++i) {
if (!isComposite[i]) {
for (int j = i * i; j <= N; j += i) {
isComposite[j] = true;
}
}
}
// 计算并存储素数及其个数
int primeCount = 0;
long long primeSum = 0;
for (int i = M; i <= N; ++i) {
if (!isComposite[i]) {
primes.push_back(i);
primeCount++;
primeSum += i;
}
}
}
int main() {
int M, N;
cout << "Enter the range (M to N): ";
cin >> M >> N;
vector<int> primes;
countAndSumPrimes(M, N, primes);
cout << "Number of primes in the range from " << M << " to " << N << ": " << primeCount << endl;
cout << "Sum of the primes: " << primeSum << endl;
return 0;
}
```
在这个程序中,`isPrime` 函数检查一个数是否为质数,而 `countAndSumPrimes` 函数则使用筛法找出并累加M到N范围内的所有质数。
运行此程序后,请根据提示输入范围M和N,它将输出对应区间的素数个数和它们的总和。
阅读全文