2013-05-05 69 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

相關問題