C++ 求1到10^7之间素数之和的程序 (i=2;istd::vector primes={2,3,5}; 布尔校验素数(uint x){ 布尔结果=真; 用于(自动i:素数){ 如果(i*i>x){ 打破 } 如果(x%i==0){ 结果=假; 打破 } } 如果(结果){ 素数。推回(x); } 返回结果; } void get_primes(){ 对于(uint x=6;i
我建议您查看C++ 求1到10^7之间素数之和的程序 (i=2;istd::vector primes={2,3,5}; 布尔校验素数(uint x){ 布尔结果=真; 用于(自动i:素数){ 如果(i*i>x){ 打破 } 如果(x%i==0){ 结果=假; 打破 } } 如果(结果){ 素数。推回(x); } 返回结果; } void get_primes(){ 对于(uint x=6;i,c++,algorithm,C++,Algorithm,我建议您查看 此算法将优化您的代码。在范围内使用a,然后对找到的素数求和。2是素数。所有其他素数都是奇数,这将有效地使您必须检查的数字减半。与其检查所有数字,只需检查以前找到的素数,当然可以跳过偶数。j@MSaltersunsigned long long在j*jAnd中是不需要的,您想告诉我们什么?虽然这个代码片段可以解决这个问题,但确实有助于提高您文章的质量。请记住,您将在将来为读者回答这个问题,而这些人可能不知道您的代码建议的原因。请检查%==0仅用于“已知”素数,不是[2;sqrt(x)
此算法将优化您的代码。在范围内使用a,然后对找到的素数求和。2是素数。所有其他素数都是奇数,这将有效地使您必须检查的数字减半。与其检查所有数字,只需检查以前找到的素数,当然可以跳过偶数。
j@MSaltersunsigned long long
在j*jAnd中是不需要的,您想告诉我们什么?虽然这个代码片段可以解决这个问题,但确实有助于提高您文章的质量。请记住,您将在将来为读者回答这个问题,而这些人可能不知道您的代码建议的原因。请检查%==0仅用于“已知”素数,不是[2;sqrt(x)]
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;
}
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);
}