我正在使用 Mathematica解决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
是任何大于它的数字都可以写成两个丰富数字的总和。