2014-11-23 105 views
-4

這是我對Project Euler Problem 3的解決方案。我已經爲Project Euler編寫了這個代碼,但是如果我放入「49」,我會得到「49」。什麼似乎是問題?歐拉項目#3 Python

n = 600851475143 
i = 2 

while (i * i < n): 
    while (n % i == 0): 
     n = n/i 
    i = i + 1 

print (n) 
+0

你在哪裏投入「49」? – irrelephant 2014-11-23 01:48:32

+1

我不知道「Project Euler#3」是什麼。我知道我可以檢查它,但它應該是有問題的! – Tacet 2014-11-23 01:52:50

+0

我投票結束這個問題作爲題外話,因爲歐拉工程專門要求人們不要在網上發佈回答他們的問題。對於StackOverflow來說,通過發佈他們所有問題的答案來摧毀他們的網站將會是一種糟糕的形式。 – theJollySin 2015-10-23 19:20:04

回答

1

我假設你的意思是設置n = 49

你的外循環的同時,儘快檢查條件i * i < n,這是不是真的i == 7,所以外循環中斷,因爲它擊中7。將<更改爲<=

但是,你的代碼首先是不正確的 - 也許像這樣的東西是你的意思?

n = 600851475143 
i = 2 
factors = [] 

while (i <= n): 
    while (n % i == 0): 
     n = n/i 
     factors.append(i) 
    i = i + 1 

print factors 
+0

這是錯誤的。 'i'在'i * i Dair 2014-11-23 01:58:59

+0

雖然他的實現對於實際問題來說速度不夠快,但他對於'49'的問題是,他在最後打印出'n'而不是'i'。 – Dair 2014-11-23 01:59:58

+0

@Pound Printing'i'不打印最大的主要因素 - 嘗試使用'n = 15'的原始代碼。當然,答案是'5',但是'i'是4. – kevinsa5 2014-11-23 02:01:23

1

要打印要打印in ...

0

你的代碼寫假設有一個以上的因素,但在N = 49的情況​​下,它會證明,它只有一個就是7的因素,這樣你就可以添加一條線檢查,做它有一個以上的因素,如果不是那麼我應該打印

0

可能是最快的方式來解決它找到所有的主要因素,然後返回最大值。

蠻力解決方案花了我不到1秒