OJ-1042 筛法求素数

来源:互联网 发布:163邮箱的smtp端口 编辑:程序博客网 时间:2024/06/11 17:45

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

0 0
原创粉丝点击