2014-02-28 47 views
1

所以現在的問題是,如下所示:項目歐拉#3獲得了一些大素因子

的13195的首要因素是5,7,13和29 什麼是數的最大素因子600851475143?

我爲它的邏輯和算法似乎是正確的,但我似乎無法發現其中的錯誤,還有的代碼問題的代碼。

#include <iostream> 

using namespace std; 

int main() 
{ 
    long int x = 600851475143; 
    for(long int i=x-1; x%i; --i); 
    cout << i; 
    return 0; 
} 

RE:不知道 '我' 的範圍,教師在我校沒有告訴我=)根本就沒有責怪他們]


RE:爲感謝名單所有的答覆,我得到了答案。 =)

+0

...是編譯的東西嗎?您在循環中使用的變量不存在外部,但您嘗試打印它。 –

+0

@Riccardo它[不編譯](http:// ideone。COM/6G7Xkf)。 –

+3

你的程序找到'x'的最大因子。爲什麼它應該是質量?它可能很好,但它並不需要。用'x = 8'檢查。 – Lumen

回答

1

有兩個小問題,一個大問題:

  • i變量超出範圍打印 - 在聲明的頭部聲明變量的作用域與該語句結束。在這種情況下,i不是分號後可見的,所以你需要聲明它for
  • 以外的變量可能不一定認爲要放入其中值 - long允許是一個32位類型,在很多平臺上,它是。爲了使至少64位的,申報改爲long long

一旦你解決這些問題,你的代碼進行編譯。但是,由於代碼中存在第三個大問題,需要很長時間才能運行:您的算法速度太慢。

0

這個怎麼樣呢?只需申報i即可。

int main() 
{ 
    long int x = 600851475143, i; 
    for (i = x-1; x%i; --i); 
    cout << i; 
    return 0; 
} 

在你i版本,當你調用cout不存在。

int main() 
{ 
    long int x = 600851475143; /* here i doesn't exist */ 
    for(long int i=x-1; x%i; --i) /* here i is declared */ ; 
    /* the for is closed by ; so the scope of i is already closed */ 
    cout<<i; 
    return 0; 
} 

但是,您的解決方案中還存在其他問題,正如其他答案和評論所指出的那樣。

0

我是不是外面for循環使用。

long int i=0; 
for(i= x-1;x%i;--i); 
cout<<i<<endl; 
0

至少下面的代碼編譯正確,也沒有溢出問題:

#include <iostream> 

using namespace std; 

int main() 
{ 
    unsigned long long x = 600851475143, i; 
// ^^^^^^^^ Note the unsigned! 
    for(i= x-1;x%i;--i); 
    cout<<i; 
    return 0; 
} 
+0

THX指出,修復它。 –

0

也有一個缺陷:

如果x是黃金,你不會找到答案。 i應該從相同的值開始。

+0

在這種情況下,它總會輸出'x'。 – ajay

+0

@ajay:真的嗎? –

+0

如果'i'從'x'開始,不會將'x%i'評估爲false並結束循環?我在這裏錯過了什麼? – ajay