私はMathematicaを使ってプロジェクトオイラーの問題23を解いています:
2つの豊富な数の合計として書くことができないすべての正の整数の合計を見つけます。
#
豊富な数はそのようなものであることを思い出してください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
は、それより大きい任意の数が2つの豊富な数の合計として記述できるためです。