筛法求素数用C语言数组输出n之内的所有素数
时间: 2024-12-21 22:29:31 浏览: 6
C语言数组编程题及解答.doc
在C语言中,使用筛法(如埃拉托斯特尼筛法)找出一定范围内的所有素数是非常常见的算法。这里是一个简单的埃拉托斯特尼筛法实现,它会创建一个布尔数组,然后标记所有的质数:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX 100 // 可根据需求调整这个最大值
// 判断是否为素数
bool is_prime(int num, bool primes[MAX]) {
if (num <= 1) return false;
if (num == 2 || num == 3) return true;
// 如果num是偶数(除了2),不是素数
if (num % 2 == 0) return false;
for (int i = 3; i * i <= num; i += 2) {
if (primes[i] == false) continue; // 已经被标记为非素数,跳过
if (num % i == 0) return false;
}
return true;
}
// 筛选并打印素数
void sieve_of_eratosthenes(int n, bool primes[MAX]) {
for (int i = 0; i <= n; i++) {
primes[i] = true; // 假定所有数字都是质数
primes[0] = primes[1] = false; // 0和1不是质数
}
for (int i = 2; i * i <= n; i++) {
if (primes[i]) {
for (int j = i * i; j <= n; j += i) {
primes[j] = false; // 标记i的倍数为非素数
}
}
}
printf("Prime numbers below %d are:\n", n);
for (int i = 2; i <= n; i++) {
if (primes[i])
printf("%d ", i);
}
printf("\n");
}
int main() {
int n = 50; // 按需设置要查找素数的上限
bool primes[MAX];
sieve_of_eratosthenes(n, primes);
return 0;
}
```
在这个程序中,`is_prime`函数用于检查单个数字是否是素数,而`sieve_of_eratosthenes`函数则负责应用筛法筛选出所有小于或等于给定数值n的素数。
运行此程序后,它会在控制台输出指定范围内(这里是n=50)的所有素数。
阅读全文