我使用Mathematica解決Problem 23 of Project Euler:項目歐拉#23數學
查找不能寫成兩個充足數的和所有的正整數的總和。
回想一下,豐富的數字#
就是這樣一個這樣的Total[Divisors[#]] - # > #
。這裏是我的代碼:
list1 = Table[i, {i, 1, 28123}];
list2 = Select[list1, Total[Divisors[#]] - # > # && 2 * # < 28123 &];
list3 = {};
l = Length[list2];
For[i = 1, i <= l, i++,
For[j = i, j <= l, j++,
list3 = Append[list3, list2[[i]] + list2[[j]]]]];
Total[Complement[list1, list3]]
這是非常緩慢;嵌套的For
循環會花費大量時間進行評估。
我正確接近這個問題嗎?有沒有辦法讓它更快?
編輯:28123
背後的原因是任何大於它的數字都可以寫成兩個豐富數字的和。
這是快如閃電,但給出了不正確的解決方案。 – Raptor
我很抱歉!我只是意識到我犯了一個邏輯錯誤。我使用更快的建議來修復它。謝謝! – Raptor