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秒。 有谁能建议优化的解决方案? 谢谢!
答案 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
此算法将优化您的代码。