如何在C++中编写一个程序来计算并输出从m到n范围内的素数个数?
时间: 2024-11-30 13:29:54 浏览: 24
在C++中,计算从m到n范围内的素数个数通常可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)。以下是简单的步骤:
1. 定义一个布尔数组isPrime,大小为(n+1),初始化所有元素为true。这将用于标记每个数字是否为素数。
2. 从2开始,遍历到sqrt(n)。对于每一个素数i,将isPrime[i]后的所有2*i倍数设置为false,因为它们不可能是素数(除了i本身)。
3. 统计isPrime数组中m到n之间的true值,即为素数个数。因为如果某个数字为素数,则它前面的数字都不可能是素数,所以不需要额外检查。
4. 输出结果。
下面是对应的C++代码示例:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int countPrimes(int m, int n) {
bool isPrime[n + 1];
memset(isPrime, true, sizeof(isPrime));
for (int i = 2; i * i <= n; ++i) {
if (isPrime[i]) {
// 将 i 的倍数标记为非素数
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
}
int primeCount = 0;
for (int i = m; i <= n && isPrime[i]; ++i)
primeCount++;
return primeCount;
}
int main() {
int m, n;
cout << "请输入起始数m和结束数n:";
cin >> m >> n;
int result = countPrimes(m, n);
cout << "在" << m << "到" << n << "范围内有" << result << "个素数。\n";
return 0;
}
```
阅读全文