请简述埃氏筛法的原理,并用c++写出代码
时间: 2023-03-20 22:01:35 浏览: 139
埃氏筛法是一种用于求解素数的算法。其基本原理是,从2开始,将每个素数的倍数都标记成合数,直到没有未标记的数为止。具体步骤如下:
1. 将2~n的所有数放入一个列表中,其中n为所求素数范围的最大值。
2. 从2开始,依次将每个素数的倍数标记成合数,直到遇到一个未标记的数。
3. 重复步骤2,直到没有未标记的数为止。此时,列表中未被标记的数即为素数。
以下是用C语言实现的埃氏筛法代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
printf("请输入素数范围的最大值:\n");
scanf("%d", &n);
// 创建一个大小为n+1的数组,初始值全部为1
int* nums = (int*)malloc(sizeof(int) * (n + 1));
for (int i = 2; i <= n; i++) {
nums[i] = 1;
}
// 依次标记每个素数的倍数
for (int i = 2; i * i <= n; i++) {
if (nums[i] == 1) {
for (int j = i * i; j <= n; j += i) {
nums[j] = 0;
}
}
}
// 输出未被标记的数,即素数
printf("素数为:\n");
for (int i = 2; i <= n; i++) {
if (nums[i] == 1) {
printf("%d ", i);
}
}
printf("\n");
free(nums);
return 0;
}
```
阅读全文