C++ 代码在小输入时运行良好,但在大输入时就像一个无限循环
我试图解决一个问题,那就是找到200万以下的素数,并将其相加,然后将其显示为我的输出(有关更多信息,请参阅)。我已经写了这个代码C++ 代码在小输入时运行良好,但在大输入时就像一个无限循环,c++,C++,我试图解决一个问题,那就是找到200万以下的素数,并将其相加,然后将其显示为我的输出(有关更多信息,请参阅)。我已经写了这个代码 #include<iostream> using namespace std; int main() { int last_range; int not_prime_counter=0; int sum=0; int prime_number_counter=0; cout<<"Enter range
#include<iostream>
using namespace std;
int main()
{
int last_range;
int not_prime_counter=0;
int sum=0;
int prime_number_counter=0;
cout<<"Enter range from 2 to ";
cin>>last_range;
int input=2;
/*
if(input==1)
{
cout<<input<<" is Prime\n";
sum=sum+input;
input++;
}
*/
if(input==2)
{
cout<<input<<" Prime\n";
sum=sum+input;
cout<<"Sum : "<<sum<<endl;
input++;
prime_number_counter++;
}
if(input==3)
{
cout<<input<<" Prime\n";
sum=sum+input;
cout<<"Sum : "<<sum<<endl;
input++;
prime_number_counter++;
}
if(input>3)
{
for(int i=2;i<=(input/2);i++)
{
if(input==last_range)
{
break;
}
if(input%i==0)
{
//cout<<input<<" is NOT Prime\n";
input++;
i=2;
}
if(i==(input/2) && not_prime_counter==0)
{
cout<<input<<" Prime\n";
sum=sum+input;
cout<<"Sum : "<<sum<<endl;
input++;
i=2;
}
}
}
cout<<"Final Sum : "<<sum<<endl;
system("pause");
return 0;
}
#包括
使用名称空间std;
int main()
{
int最后一个_范围;
int非素数计数器=0;
整数和=0;
整数素数计数器=0;
库特劳斯特鲁山脉;
int输入=2;
/*
如果(输入=1)
{
cout对于较大的输入,您的算法太慢。要确定一个数字是否为素数,只需检查它的平方根即可
检查一个数字是否为素数的干净快速方法是:
bool prime(int n) {
if (n == 1) return false;
if (n == 2) return true;
if (n % 2 == 0) return false;
for (i = 3; i*i <= n; i += 2)
if (n % i == 0) return false;
return true;
}
bool素数(int n){
如果(n==1)返回false;
如果(n==2),则返回true;
如果(n%2==0)返回false;
对于(i=3;i*i“代码在小输入时运行良好,但在大输入时就像一个无限循环”,这意味着您的算法很慢:)这不是一个无限循环,只是需要花费很长的时间来完成它的工作。请参阅上以获取加速建议。您应该将返回类型更改为bool
,并返回true
/false
。这很好,因为int
隐式转换为bool
,但从逻辑上讲,它应该只返回boo>l首先是
。