c语言求3到n素数的和
时间: 2024-10-24 18:13:30 浏览: 27
在C语言中,求从3到n的所有素数之和,你可以使用一种称为“筛法”的经典算法——埃拉托斯特尼筛(Sieve of Eratosthenes)。下面是简单的步骤:
1. 创建一个布尔数组`isPrime[0..n]`,初始化所有元素为true,表示它们最初都被认为是质数。
2. 遍历从2到√n(因为大于n的数肯定不是质数),对于每个素数i,将它的倍数标记为非素数。例如,如果`isPrime[j]`是true,那么更新`isPrime[i*j] = false`。
3. 检查`isPrime`数组,找到从3开始的所有连续的true值,它们对应的索引就是素数。然后累加这些素数。
下面是一个基本的C语言函数实现:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_N 10000
bool isPrime(int n) {
if (n <= 1)
return false;
if (n == 2)
return true;
if (n % 2 == 0)
return false;
for (int i = 3; i * i <= n; i += 2) {
if (n % i == 0)
return false;
}
return true;
}
int sumOfPrimes(int n) {
int sum = 0;
bool prime[MAX_N + 1] = {false};
for (int i = 2; i <= n; ++i) {
if (prime[i])
continue;
// 将i的倍数设置为非素数
for (int j = i * i; j <= n; j += i)
prime[j] = true;
sum += i;
}
return sum;
}
int main() {
int n;
printf("Enter a number (<= %d): ", MAX_N);
scanf("%d", &n);
printf("Sum of primes from 3 to %d is: %d\n", n, sumOfPrimes(n));
return 0;
}
```
阅读全文