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

#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("
");
	
	free(a);
	
	return 0;
}

原文地址:https://www.cnblogs.com/WALLACE-S-BOOK/p/9732300.html