Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 代码在小输入时运行良好,但在大输入时就像一个无限循环_C++ - Fatal编程技术网

C++ 代码在小输入时运行良好,但在大输入时就像一个无限循环

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

我试图解决一个问题,那就是找到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 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首先是