#include<stdio.h>
#include<stdlib.h>
int main()
{
unsigned int N=0;
unsigned int*numbers=NULL;
unsigned int i,j,flag=0;
printf("筛选法求素数,输出(1,N】的素数:\n\n");
do
{
printf("please input N");
scanf("%u",&N);
if(N<=1)
{
printf("N必须是大于1 的正整数\n");
printf("请重新输入!或按Ctrl+C退出程序\n");
fflush(stdin);
}
}
while(N<=1);
fflush(stdin);
printf("N=%u\n\n",N);
numbers=(unsigned int *)calloc(N+1,sizeof(unsigned int));
if(numbers==NULL)
{
printf("内存分配失败!程序终止······\n");
exit(-1);
}
for(i=2;i<=N;i++)
{
flag=0;
if(numbers[i]==0)
{
for(j=i+i;j<=N;j+=i)
{
numbers[j]=1;
printf("%d",j);
flag=1;
}
if(flag==1)printf(":%d的倍数被筛除\n",i);
}
}
printf("\n------(1,%d]之间素数列表------\n",N);
for(i=2;i<=N;i++)
{
if(numbers[i]==0)printf("%d",i);
}
putchar('\n');
free(numbers);
return 0;
}