程序没有运行,工作太多了?

时间:2013-03-22 10:02:33

标签: c++

当我运行它时,它只是打开命令提示符窗口,只有下划线在开始时闪烁。我等了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;

            }
        }
    }
}

2 个答案:

答案 0 :(得分:4)

程序的复杂性是巨大的 - 它需要永远运行。它可能有效,但for循环中的迭代次数非常多。

您正在尝试运行此循环:

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

这对于程序来说太快了。

除此之外,在prime()你正在运行第二个循环:

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

(因为para与外部循环中的i相关)使得复杂度为O(n ^ 2)

答案 1 :(得分:2)

你知道300851475143是一个庞大的数字,你有两个嵌套的循环可以解决这个问题!

如果每次迭代都需要1ns,则需要300s x 300s = 25 hours才能完成工作。 (这只是一个近似值)