求素数(厄拉多塞筛法)
作者:互联网
厄拉多塞筛法找素数
1.1不是素数,2是素数
2.从2开始,将数组下标是2倍数对应的值置为1
3.按照第2步的方法继续筛选3的倍数,4的倍数......n-1的倍数
代码实现
#include<stdio.h>
#include<stdlib.h>
int main() {
//求前n项的素数
//注意:1不是素数,2是素数
int n = 0;
scanf("%d", &n);
int *nums = (int*)malloc((n+1) * sizeof(int)); //下面算法将下标作为值比较
//创建动态数组时默认不为0,所以要初始化为0
for (int i = 0; i < n+1; i++) {
nums[i] = 0;
}
//从2开始,将数组下标是2倍数对应的值置为1
//注意,这里是按数组下标的倍数进行对比,不是按数组里对应的值对比,例如第一次是nums[2]是2进行对比,不能理解为nums[2]作为第三项进行对比
for (int i = 2; i < n+1; i++) {
//第一次 nums[2] == 0
if (nums[i] == 0) {
//将数组下标是2倍数对应的值置为1
for (int j = i + i; j < n; j += i) {
nums[j] = 1;
}
}
}
for (int i = 2; i < n+1; i++) {
if (nums[i] == 0) {
printf("%d\n", i);
}
}
free(nums);
return 0;
}
标签:下标,厄拉多塞,筛法,nums,int,素数,倍数,数组 来源: https://www.cnblogs.com/pengyang97/p/15783852.html