求质数——埃拉托色筛选法

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
    int i = 2, j = 0;
    long N = atol(argv[1]);
    int *a = malloc(N*sizeof(int));
    if (NULL == a)
    {
        printf("There is no enough memory!\n");
        return -1;
    }
    for(i=2; i<N; i++)
        a[i] = 1;

    for(i=2; i<N; i++)
    {
        if(a[i])
        {
            for(j=i; j*i<N; j++)
            {
                a[i*j] = 0;
            }
        }
    }

    for(i=2; i<N; i++)
    {
        if(a[i])
            printf("%4d ", i);
    }

    printf("\n");

    return 0;

}

 

posted @ 2018-04-21 13:26  朝雾之归乡  阅读(365)  评论(0编辑  收藏  举报