Description
用筛法求之N内的素数。
Input
N
Output
0~N的素数
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int is_prime(int);
void filter(int *,int,int);
int main()
{
int n,*p,i;
scanf("%d",&n);
p=(int*)malloc(sizeof(int)*(n+1));
for(i=1; i<=n; ++i)
p[i]=i;
for(i=2; i<=n; ++i)
{
if(p[i]==0)
continue;
if(is_prime(i))//判断是否是素数
filter(p,i,n);//筛选
}
i=2;
for(i=2; i<=n; ++i)
{
if(p[i]!=0)//输出所有不是0的数组元素
printf("%d\n",p[i]);
}
return 0;
}
int is_prime(int n)
{
int i,flag=1;
for(i=2; i<=sqrt(n); ++i)
{
if(n%i==0)//不是素数
{
flag=0;
break;
}
}
return flag;
}
void filter(int *p,int m,int n)
{
int i;
for(i=m*2; i<=n; i+=m)//将数组中素数的整数倍置为0
p[i]=0;
}