-6

これを実行すると、コマンドプロンプトウィンドウが開き、最初にアンダースコアのみが点滅します。20 分待ったが、何も起こらなかった。テキストやエラーはなかった。

#include <iostream>

using namespace std;

int prime(unsigned __int64 para) {          // returns 1 if para is a prime number
    for (unsigned __int64 i = 2; i < para; i++) {
        if (para % i == 0) {
            return 0;
        }
    }
    return 1;  
}

int main()
{
    for (unsigned __int64 i = 300851475143; i > 2; i--) {
        if (prime(i) == true) {                  //  checks if i is prime
            if (600851475143 % i == 0) {         //  checks if 600851475143 is divisible by said prime, print it if so
                cout << i << endl;
                break;

            }
        }
    }
}
4

2 に答える 2

4

プログラムの複雑さは非常に大きく、実行には永遠に時間がかかります。おそらく有効ですが、forループ内の反復回数は膨大です。

このループを実行しようとしています:

for (unsigned __int64 i = 300851475143; i > 2; i--)

これだけでは、プログラムがすぐに終了するには大きすぎます。

それに加えてprime()、2 番目のループを実行しています。

for (unsigned __int64 i = 2; i < para; i++)

これは(外側のループにpara関連しiているため)複雑さをO(n ^ 2)にします

于 2013-03-22T10:06:01.060 に答える
2

は膨大300851475143な数であり、この数を回避する 2 つのネストされたループがあります。

各反復にかかる場合は、ジョブを終了1nsする必要があります。(あくまでも目安です)300s x 300s = 25 hours

于 2013-03-22T10:06:03.943 に答える