用C语言求前n个素数之和
时间: 2024-09-26 07:09:36 浏览: 48
015 C语言利用数组求前n个质数
5星 · 资源好评率100%
在C语言中,求前n个素数之和可以采用埃拉托斯特尼筛法(Sieve of Eratosthenes),这是一种查找一定范围内所有质数的有效算法。以下是简单的步骤和伪代码:
1. 初始化一个数组`isPrime`,长度为n+1,全设置为true,表示从0到n的所有数字都是候选素数。
2. 设置第一个素数为2,因为它是唯一的偶数质数。
3. 遍历数组,对于每个已经标记为素数的数i:
a. 将`isPrime[i*2]`设为false,因为所有的偶数除了2之外都不是素数。
b. 如果i乘以当前索引小于等于n,将`isPrime[i*j]`设为false,其中j从3开始,每次递增2,因为我们只需要检查能被i整除的奇数因子。
4. 统计并累加素数:遍历数组,将所有`isPrime`值为true的元素加起来,并加上前一个素数。
下面是C代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
// 简单版本的Sieve of Eratosthenes
void findPrimes(int n, int primes[]) {
bool isPrime[n + 1];
for (int i = 0; i <= n; i++) {
isPrime[i] = true;
}
isPrime[0] = isPrime[1] = false;
int count = 0;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
// 标记i的倍数为非素数
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
count++;
if (count == n) {
break;
}
}
}
int sum = 0;
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
primes[count++] = i;
sum += i;
}
}
printf("前 %d 个素数之和为:%d\n", n, sum);
}
int main() {
int n;
printf("请输入你要找的素数个数: ");
scanf("%d", &n);
int primes[n];
findPrimes(n, primes);
return 0;
}
```
运行此程序后,输入你想查找的素数个数n,它会输出对应个数的素数以及它们的和。
阅读全文