统计素数并求和。输入两个正整数m和n(1<m<n<500),统计给定整数m和n区间内给定素数的个数并对它们求和
时间: 2024-10-23 18:14:29 浏览: 162
在C语言中,我们可以使用经典的“埃拉托斯特尼筛法”来找出指定范围内的所有素数,然后统计并求和这些素数。以下是一个简单的示例程序:
```c
#include <stdio.h>
// 判断是否为素数的辅助函数
int is_prime(int num) {
if (num <= 1) return 0;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return 0;
}
return 1;
}
// 主函数,计算并输出结果
void prime_sum(int m, int n) {
int sum = 0, count = 0;
// 创建一个布尔数组标记非素数
bool primes[500] = {true};
primes[0] = primes[1] = false;
// 根据埃拉托斯特尼筛法填充素数信息
for (int p = 2; p*p <= n; p++) {
if (primes[p]) {
for (int i = p * p; i <= n; i += p) {
primes[i] = false;
}
}
}
// 统计和计算给定范围内素数及其和
for (int i = m; i <= n; i++) {
if (is_prime(i)) {
count++;
sum += i;
}
}
printf("Number of primes between %d and %d is: %d\n", m, n, count);
printf("Sum of the primes is: %d\n", sum);
}
int main() {
int m, n;
printf("Enter two positive integers (1 < m < n < 500): ");
scanf("%d %d", &m, &n);
// 检查输入是否有效
if (m < 1 || m >= 500 || n < 1 || n >= 500 || m >= n) {
printf("Invalid input! Please enter values within the specified range.\n");
return 1;
} else {
prime_sum(m, n);
}
return 0;
}
```
这个程序首先创建一个`primes`数组来记录每个数字是否为素数。接着,根据筛法消除可能的合数。最后遍历`m`到`n`之间的数,统计素数个数并求和。
阅读全文