C语言求m~n之前的全部素数和
时间: 2024-11-27 08:19:50 浏览: 6
循环结构<p>例-求~间的全部素数。-C语言第三章内容
在C语言中,求从m到n之间的所有素数并计算它们的和,可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)。这个算法的基本思想是从2开始,逐步排除每个素数的倍数,直到达到n为止。
以下是大致的步骤:
1. 创建一个布尔数组isPrime,大小为(n+1),初始化所有元素为true,表示默认数字都是可能的素数。
2. 遍历从2到sqrt(n)(因为大于n的数肯定不是n的因子),如果isPrime[i]为true,说明i是一个素数,将它的所有倍数标记为false。
3. 初始化一个变量sum为0,遍历从m到n,遇到isPrime[j]为true的j(即j是素数),就将它加到sum上。
4. 返回sum作为结果。
下面是一个简单的C语言函数实现示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
#define MAX 10000 // 修改为n的最大值
bool isPrime[MAX + 1];
void sieveOfEratosthenes(int n) {
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i)
isPrime[j] = false;
}
}
}
int sumPrimes(int m, int n) {
sieveOfEratosthenes(n);
int sum = 0;
for (int i = m; i <= n && isPrime[i]; i++)
sum += i;
return sum;
}
int main() {
int m, n;
printf("Enter the range (m to n): ");
scanf("%d %d", &m, &n);
printf("Sum of prime numbers from %d to %d is: %d\n", m, n, sumPrimes(m, n));
return 0;
}
```
阅读全文