用于查找1到10 ^ 7之间的素数之和的程序

时间:2017-01-31 13:29:46

标签: c++ algorithm

for(i=2;i<=n;i++)    
{
    flag=0;

    for(j=2;j<=sqrt(i);j++) //Looping till square root of n times
    {
        if(i%j==0) 
        {
            flag=1;
            break;
        }
    }

    if(flag==0)
        sum+=i;
}

跑步时间超过5秒, 但问题要求的时限不到5秒。 有谁能建议优化的解决方案? 谢谢!

2 个答案:

答案 0 :(得分:0)

std::vector<uint> primes = {2,3,5};
bool check_prime(uint x){    
    bool result = true;
    for(auto i: primes){
        if(i*i>x){
            break;
        }
        if(x%i==0){
            result = false;
            break;
        }
    }
    if(result){
        primes.push_back(x);
    }
    return result;
}

void get_primes(){
    for(uint x =6; i<N; i++){
        check_prime(x);
    }
}

uint get_sum(){
    return std::accumulate(primes.begin(), primes.end(), 0, std::plus);
}

答案 1 :(得分:0)

我建议你看看Sieve of Eratosthenes algorithm

此算法将优化您的代码。