c代码写埃氏筛法求素数
时间: 2023-09-04 12:10:52 浏览: 194
埃氏筛法求素数的代码
埃氏筛法是一种简单有效的素数筛法,可以用C语言实现。下面是一份参考代码:
```c
#include <stdio.h>
#include <stdlib.h>
void eratosthenes(int n) {
int *is_prime = (int*) malloc(sizeof(int) * (n + 1)); // 为每个数分配一个存储空间
for (int i = 2; i <= n; i++) {
is_prime[i] = 1; // 先假设所有数都是素数
}
for (int i = 2; i * i <= n; i++) {
if (is_prime[i]) { // 如果 i 是素数,那么将 i 的倍数标记为非素数
for (int j = i * i; j <= n; j += i) {
is_prime[j] = 0;
}
}
}
printf("2 ");
for (int i = 3; i <= n; i += 2) { // 输出所有素数
if (is_prime[i]) {
printf("%d ", i);
}
}
free(is_prime); // 释放内存空间
}
int main() {
int n;
printf("请输入一个正整数n:");
scanf("%d", &n);
if (n < 2) {
printf("没有素数\n");
return 0;
}
printf("小于等于%d的素数有:\n", n);
eratosthenes(n);
return 0;
}
```
代码中,首先定义了一个动态分配内存的 `is_prime` 数组,用于存储每个数是否为素数。然后初始化所有数都是素数,接着从 2 开始循环,如果当前数是素数,就将其倍数标记为非素数,最后输出剩下的素数。
阅读全文