gpt4 book ai didi

javascript - 欧拉计划 qn 23

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:18:47 26 4
gpt4 key购买 nike

完美数是指其真约数之和恰好等于该数的数。例如,28 的真约数之和为 1 + 2 + 4 + 7 + 14 = 28,这意味着 28 是一个完美数。

如果一个数 n 的真约数之和小于 n,则称它为亏数;如果此和超过 n,则称它为富数。

由于12是最小的丰度数,1 + 2 + 3 + 4 + 6 = 16,所以可以写成两个丰度数之和的最小数是24。通过数学分析,可以证明所有大于 28123 的整数可以写成两个丰富的数字之和。然而,即使已知不能表示为两个丰度数之和的最大数小于该上限,也无法通过分析进一步降低该上限。

求所有不能写成两个丰富数之和的正整数之和。

问题:我的答案似乎比正确答案 4179871 大得多,如果有人指出我代码中的错误,我将不胜感激。非常感谢!

var abundanceArray = [];
var sumOfAbundanceArray = [];
var totalSum = 0;
var limit = 28123;

function checkRepeat(x) {
if (sumOfAbundanceArray.length === 0) return false;

for (var n = 0; n < sumOfAbundanceArray.length; n++) {
if (x === sumOfAbundanceArray[n]) return true;
}

return false;
}

for (var i = 1; i <= limit; i++) {
var sum = 0;
totalSum += i;

for (var j = 1; j <= Math.ceil(i/2); j++) {
if (i % j < 1) {
sum += j;
if (sum > i) {
abundanceArray.push(i);
break;
}
}
}
}

var total = abundanceArray.length;

for (var k = 0; k < total; k++) {
if (abundanceArray[k] * 2 > limit) break;

for (var l = k; l < total; l++) {
var sumOfAbundance = abundanceArray[k] + abundanceArray[l];

if (sumOfAbundance > limit || checkRepeat(sumOfAbundance) === true) break;
sumOfAbundanceArray.push(sumOfAbundance);
totalSum -= sumOfAbundance;
}
}

console.log(totalSum);

最佳答案

看来错误在于您输入代码的最后一次中断(最长的一行)。

sumOfAbundance 是两个丰度数的和,确实你想限制搜索以使程序运行得更快。但是 - 只有在 sumOfAbundance 大于限制的情况下才应该中断循环。那时您就会知道您的丰富值(value)太大了。

您不应该在条件的另一种情况下中断循环。它检查之前是否计算过 sumOfAbundance,但无论您之前是否看到过 sumOfAbundance 的值,如果 sumOfAbundance 仍然足够小,您必须继续循环

因此得出结论:在推送到 sumOfAbundanceArray 并更改 totalSum 之前检查此条件的两个部分,但仅当 sumOfAbundance 太大时才跳出循环。

关于javascript - 欧拉计划 qn 23,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39437800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com