winston 发表于 2012-1-20 11:21:36

求0-2000内的所有质数(筛选法)

核心算法:

我们先设保存整数0~N的数组为sieve,用“逐步求精”的方法来得出算法:
[定理1]若比素数P小的所有素数的倍数均已从sieve中删去,且P*P > N,则sieve = primes(2…N)。其中:primes(2..N)表示2..N之间所有的素数。
引用:http://blog.csdn.net/zzjjzzgggg/article/details/2493957

Code://Func.h

#include "stdafx.h"
#include <iostream>

using std::cout;
using std::endl;

void PrintNums(int num)
{
        bool *arr=new bool;

        //初始化数组
        for(int i=0;i<num;i++)
        {
                arr=true;
        }
        //去非素数
        for(int i=2;i<=num;++i)
        {
                if(arr==true)
                {
                        for(int j=2*i;j<=num;j+=i)
                        {
                                arr=false;
                        }
                }
        }
        //打印素数
        for(int i=0;i<num;i++)
        {
                if(arr==true)
                {
                        cout<<i+1<<endl;
                }
        }
}


作者:xufei96 发表于2012-1-20 10:10:28 原文链接

页: [1]
查看完整版本: 求0-2000内的所有质数(筛选法)