背景:我正在使用 Matlab 处理 Project Euler问题 23,以练习我几乎不存在的编程技能。
我的问题:
现在我有一个包含大约 6500 个数字(范围从 12 到 28122)作为元素的向量,并且想要计算所有两个元素的总和。也就是说,我只需要每个总和的一个实例,因此计算了 a1 + an 后,就不必计算 an + a1。
编辑澄清:这包括总和 a1+a1、a2+a2、...、an+an。
问题是这太慢了。
问题特定约束:
无需计算总和 28123 或以上是给定的,因为这些不能用于进一步解决问题。
我的做法:
AbundentNumberSumsRaw=[];
for i=1:3490
AbundentNumberSumsRaw=[AbundentNumberSumRaw AbundentNumbers(i)+AbundentNumbers(i:end);
end
这非常有效:p
我的评论:
我很确定逐渐增加向量 AbundentNumbersRaw 是不好的编码,因为这意味着内存使用量会不必要地飙升。我没有这样做,因为a)我不知道要预先分配什么大小的向量,b)我无法想出一种方法来有序地将总和注入 AbundentNumbersRaw 而不使用一些丑陋的嵌套循环。
"for i=1:3490" 低于元素的数量,仅仅是因为我检查并看到索引高于 3490 的数字的所有结果总和对于我来说太大而无法使用。
我很确定我的主要问题是程序需要对向量 AbundentNumbersRaw 进行大量增量增加。
任何和所有的帮助和建议将不胜感激:)
干杯
拉斯穆斯