C语言编程实现打印出2~n之间的所有素数,
时间: 2024-12-11 18:43:38 浏览: 10
在C语言中,你可以使用一种称为“Sieve of Eratosthenes”的算法来打印2到n之间的所有素数。这是一种古老而高效的查找素数的方法。下面是简单的实现步骤:
```c
#include <stdio.h>
#include <stdbool.h> // 使用布尔类型
// 定义一个函数用于标记素数
bool isPrime(int num, bool prime[], int n) {
if (num <= 1)
return false;
if (num == 2 || num == 3)
return true;
if (num % 2 == 0 || num % 3 == 0)
return false;
for (int i = 5; i * i <= num; i += 6) {
if (num % i == 0 || num % (i + 2) == 0)
return false;
}
return true;
}
// 主函数
void printPrimes(int n) {
// 初始化一个布尔数组,将所有数字标记为可能的素数
bool prime[n+1];
for (int i = 2; i <= n; i++)
prime[i] = true;
// 根据Sieve of Eratosthenes原理,逐步排除非素数
for (int p = 2; p*p <= n; p++) {
if (prime[p]) {
// 将p的倍数标记为合数
for (int i = p * p; i <= n; i += p)
prime[i] = false;
}
}
// 打印出所有素数
for (int i = 2; i <= n; i++)
if (prime[i])
printf("%d ", i);
printf("\n");
}
int main() {
int n;
printf("请输入一个正整数n: ");
scanf("%d", &n);
printPrimes(n);
return 0;
}
```
在这个代码中,我们首先创建了一个布尔数组,初始时假定所有数字都是素数。然后,我们遍历这个数组,对于每个已知的素数,将其倍数标记为合数(非素数)。最后,只保留那些被标记为素数的位置,输出相应的数值。
阅读全文