埃拉托色尼筛算法查找素数(动态内存实现)

#include<stdio.h>
#include<stdlib.h>

#define CALLOC(P, N, S)\
  if(!((P)=calloc(N, S))){\
	printf( stderr, "Insufficient memory");\
	exit(EXIT_FAILURE);\
  }
  
int main(void)
{
	int *a;
	int N;
	
	printf("输入素数范围:");
	scanf("%d", &N);
	getchar();
	
	CALLOC(a, N, sizeof(int));
	
	for(int i=2; i<N; i++)
		a[i]=1;
	//将所有元素假定为素数
	for(int i=2; i<N; i++)
		if(a[i])  //只考虑被假定为素数的元素
		   for(int j=i,k=i*j; k<N; j++,k=j*i) 
		       a[k]=0; //将被假定素数倍数设为合数
	for(int i=2; i<N; i++)
		if(a[i])
			printf("%4d ", i);
	//打印素数
	printf("\n");
	
	free(a);
	
	return 0;
}

posted on 2018-02-01 12:20  MACHINE_001  阅读(83)  评论(0编辑  收藏  举报

导航