程序不运行,工作量太大?

Program doesn't run, too much work?

本文关键字:工作量 运行 程序      更新时间:2023-10-16

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

程序的复杂性是巨大的,运行起来需要很长时间。它可能是有效的,但for循环中的迭代次数是巨大的。

您正试图运行此循环:

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

这本身就太大了,程序无法快速完成。

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

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

其中(由于para与外环中的i相关(使得复杂性O(n^2(

您知道300851475143是一个巨大的数字,并且您有两个围绕这个数字工作的嵌套循环!

如果每次迭代需要1ns,则需要300s x 300s = 25 hours来完成作业(这只是一个近似值(