2

この質問を読んでくれてありがとう!

プログラムは、10 億の後に最小の素数を見つけることです。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

cout<<i;コンソール出力ステートメントが入力ステートメントの前にあるのに、なぜそうなのcin>>x;ですか?

は実行順序を変更するため、素数が見つかったらbreakコントロールをスキップさせます。ループcin >> xの外に移動する必要があります。cin >> x

物事をかなり最適化するためにできることがいくつかあります:1を介してすべての数値で除算しようとするのではなくsqrt(N)、これまでに見つけた素数のみを除算する必要があります。これにより、物事が大幅に高速化されます。を終了条件としてsqrt使用して、 の呼び出しをドロップすることもできます。i*i < x

于 2013-02-10T14:56:48.103 に答える
3

cin >> x が for ループの中にあるようです。したがって、ループの反復ごとに、ストリームから何かを読み取ろうとします。したがって、i が素数になる前にいくつかの数字を入力する必要があります。

編集: どうやら、1000003 は素数なので、多くの数字を入力する必要はありません。

于 2013-02-10T15:00:39.480 に答える