2013-05-05 61 views
0

我正在尝试获取非常大的数字(600851475143)。我正在使用C++,控制台似乎持续多年。它已经达到了8462696833,但现在有一个闪烁的下划线。如果有帮助,我正在使用英特尔i7处理器。需要多长时间才能完成?我对C++很陌生,所以这里是我的代码。需要多长时间来处理12位数的因子?

#include <iostream> 
using namespace std; 

int main() 
{ 
    long long n = 600851475143, a = 0, b = 1, c = 0; 
    while (c < 600851475143) 
    { 
     a = n % b; 
     if (a == 0) 
     { 
      cout << b << endl; 
     } 
     ++b; 
     ++c; 
    } 
    return 0; 
} 
+2

下一秒:'71 * 839 * 1471 * 6857' – Mysticial 2013-05-05 04:27:18

+0

一段字符串有多长? – 2013-05-05 04:28:00

+0

如果您在此发布代码,可能会有所帮助,以便我们了解是否有改进空间。我猜测会有。 – cwoebker 2013-05-05 04:42:08

回答

3

您应该只需要测试多达775,147(平方根)来查找所有因素。如果您有一个因子a,您可以通过将您的原始号码除以a来得到其对应的b

如果您向我们显示您的代码,我们可能会建议其他优化。

+0

实际上,对原始数字的sqr根进行测试是最糟糕的情况(素数或半素数)。如果我们早期发现数字的因素,通常要少得多,并且除了质数因子之后,我们只需要达到商的sqr根。 – nhahtdh 2013-05-05 05:00:26

+0

@nhahtdh但是他想找出所有因素,而不仅仅是主要因素 – nullptr 2013-05-05 05:01:29

+0

哦,因素......但是,我认为从素数因素生成因素应该比测试所有因素更好? – nhahtdh 2013-05-05 05:05:40