本题要求统计给定整数M和N区间内素数的个数并对它们求和。 输入格式: 输入在一行中给出两个正整数M和N(1≤M≤N≤500)。 输出格式: 在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。 输入样例: 10 31 输出样例: 7 143用c语言解决
时间: 2024-10-14 19:10:28 浏览: 52
在C语言中,可以使用Sieve of Eratosthenes算法来找出指定范围内的所有素数,并计算它们的数量和总和。以下是使用C语言的一个简单示例来实现这个功能:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义最大值,这里设置为500
#define MAX 500
bool is_prime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return false;
}
return true;
}
void sieve_of_eratosthenes(int start, int end, int* primes) {
bool prime[MAX + 1];
memset(prime, true, sizeof(prime));
for (int p = 2; p * p <= end; p++) {
if (prime[p]) {
for (int i = p * p; i <= end; i += p)
prime[i] = false;
}
}
int count = 0;
for (int p = start; p <= end; p++) {
if (prime[p])
primes[count++] = p;
}
}
int main() {
int M, N;
scanf("%d%d", &M, &N);
int prime_count = 0;
int prime_sum = 0;
int* primes = malloc(sizeof(int) * (N - M + 1)); // 预留空间
sieve_of_eratosthenes(M, N, primes);
prime_count = sizeof(primes) / sizeof(primes[0]);
for (int i = 0; i < prime_count; i++) {
prime_sum += primes[i];
}
printf("%d %d\n", prime_count, prime_sum); // 输出素数个数和总和
free(primes); // 释放内存
return 0;
}
```
这个程序首先通过`sieve_of_eratosthenes`函数找到范围内所有的素数,然后计算并打印出素数的数量和总和。注意,在结束时别忘了释放动态分配的内存。
阅读全文