在欧拉计划中有第10个问题。
问题是找到不大于N的所有质数的总和。
我对这个问题的解决方案是:
int solve(int n){
bool check[n+1];
for(int i=0;i<=n;i++){
check[i]=true;
}
for(int i=2;i*i<=n;i++){
if(check[i]){
for(int j=i*i;j<=n;j+=i){
check[j]=false;
}
}
}
int sum=0;
for(int i=2;i<=n;i++){
if(check[i]){
sum+=i;
}
}
return sum;
}
我仍然遇到了“由于超时而终止”的问题,因此代码还没有被优化得足够好。
怎样才能更好地优化这段代码呢?
限制条件如下:
1≤T≤10^4(T是测试用例的数量)
1≤N≤10^6
您可以在此处尝试它。
sqrt(n)
的数字。它可以显著加速你的双重循环。 - Sebastian