其他分享
首页 > 其他分享> > 求素数(厄拉多塞筛法)

求素数(厄拉多塞筛法)

作者:互联网

厄拉多塞筛法找素数

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