美文网首页
质数剔除算法

质数剔除算法

作者: zackD爱rena | 来源:发表于2016-01-09 13:54 被阅读0次
    # include<stdio.h>
    # include<math.h>
    
    
    int main()
    {
    long int prime[1000000 + 1];
    long int i, j;
    long int m = 0;//记录i的值,为循环变量的辅助变量
    for (i = 3; i <= 1000000; i = i + 2)//所有的偶数全部干掉
        prime[i] = 1;
    for (i = 3; i <= sqrt((1000000 - 1)); i = i + 2)//第一层取平方数
    {
        //printf("i=%d/n",i);
        m = i;
        if (prime[i] == 1)
    
            for (j = i*i; j <= 1000000; j = i*m)//筛法的第二层。从平方开始如果是存在的就筛掉
            {
                m = m + 2;
                if (prime[j] == 1)
                {
                    prime[j] = 0;
                    // printf("%d/t",j);//测试用例。用于查看筛掉的数
                }
            }//第二层结束
        //printf( "/n");//测试用例。用于分割筛掉的数。分割间的数之间有相同的差
    
    }//第一层结束 
    
    
    printf("%ld\n", 2); /*2非奇数故未在循环算法之内,但2是素数,故先输出*/
    //打印质数
    for (i = 3; i <= 1000000; i = i + 2)
        if (prime[i] == 1)
        {
            printf("%ld\n", i);
        }
    
    
    return 0;
    }

    相关文章

      网友评论

          本文标题:质数剔除算法

          本文链接:https://www.haomeiwen.com/subject/cycqkttx.html