当我运行它时,它只是打开命令提示符窗口,只有下划线在开始时闪烁。我等了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;
}
}
}
}
答案 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
才能完成工作。 (这只是一个近似值)