2

感谢您花时间阅读这个问题!

该程序是在十亿之后找到最小的素数。在 int main() 的末尾,我包含了一个控制台输入cin>>x;,目的是防止命令提示符关闭得太快,以便我可以看到结果。但是,我意识到我必须先输入一些内容,然后才能显示我想要的结果。

所以问题是:即使控制台输出语句 cout<<i;在输入语句之前,为什么会这样cin>>x;

#include <iostream>
#include <math.h>
using namespace std;

int is_prime(int x);

int main()
{
    for (int i=100000000;;i++){ 
        if(is_prime(i)){ 
                cout<<i;
                break;}
    int x;
    cin>>x;

       }

}

int is_prime(int x)
{
    double maxvalue = sqrt(static_cast<double>(x));
    for ( int i=2;i<=maxvalue;i++){
        if (x%i == 0 ) return false; }
        return true;
}
4

2 回答 2

3

似乎 cin >> x 在 for 循环内。因此,循环的每次迭代,您都会尝试从流中读取一些内容。因此,您需要在 i 变为素数之前输入一些数字。

编辑:显然,1000003 是素数,所以你不必输入很多数字。

于 2013-02-10T15:00:39.480 回答
3

即使控制台输出语句cout<<i;在输入语句之前,为什么会这样cin>>x;

因为更改了执行顺序,所以一旦找到素数break就让控件跳过。cin >> x您需要移出cin >> x循环。

你可以做几件事来优化事情:而不是试图除以每个数字1sqrt(N)你应该只除掉你到目前为止找到的素数。这将大大加快速度。您也可以sqrt通过使用i*i < x作为退出条件来放弃调用。

于 2013-02-10T14:56:48.103 回答