OJ-1042 筛法求素数

Description

用筛法求之N内的素数。

Input

N

Output

0~N的素数

#include 
#include 
#include 
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;
}

你可能感兴趣的:(OJ-1042 筛法求素数)