在使用Atkins的Sieve寻找素数之和时面临问题

时间:2019-07-11 05:38:06

标签: sieve-of-atkin

我正在尝试通过Atkins的Sieve查找素数。

最后一个for循环中的if语句从不正确。尝试调试但可以理解出了什么问题。

int  limit = 2000000 ;
int crossLimit = (sqrt(limit) - 1)/2 ;
int sieveBound = (limit-1)/2  ;


void  SievePrime(int limit)
{
    bool* boolArray = new bool [sieveBound]()  ;

    for(int i = 0;i<crossLimit;i++)
    {
        if(!boolArray[i])
        {
            for(int j = 2*i*(i+1);j<sieveBound;j+=2*i+1)
            {
               // cout<<"hi"<<end
                boolArray[j] = true  ;
            }
        }
    }

    double sum = 2 ;
    for(int i =1 ;i<sieveBound ;i++)
    {
        if(not boolArray[i] )
        {

            sum += 2*i+1 ;
        }
    }

    cout<<fixed<<sum<<endl;

}

预期输出: 142913828922

0 个答案:

没有答案