Javascript euler qn 23项目
一个完全数是一个数,它的适当因子之和正好等于这个数。例如,28的适当除数之和为1+2+4+7+14=28,这意味着28是一个完全数 如果一个数n的真因子之和小于n,则称其为亏数;如果该和大于n,则称其为丰数 因为12是最小的富足数,1+2+3+4+6=16,所以可以写成两个富足数之和的最小数是24。通过数学分析,可以证明所有大于28123的整数都可以写成两个富足数之和。然而,通过分析无法进一步降低该上限,即使已知不能表示为两个丰富数之和的最大数小于该上限 求所有不能写成两个富足数之和的正整数之和 问题:我的答案似乎比正确答案(4179871)大得多,如果有人指出我代码中的错误,我们将不胜感激。多谢各位Javascript euler qn 23项目,javascript,algorithm,Javascript,Algorithm,一个完全数是一个数,它的适当因子之和正好等于这个数。例如,28的适当除数之和为1+2+4+7+14=28,这意味着28是一个完全数 如果一个数n的真因子之和小于n,则称其为亏数;如果该和大于n,则称其为丰数 因为12是最小的富足数,1+2+3+4+6=16,所以可以写成两个富足数之和的最小数是24。通过数学分析,可以证明所有大于28123的整数都可以写成两个富足数之和。然而,通过分析无法进一步降低该上限,即使已知不能表示为两个丰富数之和的最大数小于该上限 求所有不能写成两个富足数之和的正整数之和
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);
var丰度阵列=[];
var SumofandanceArray=[];
var totalSum=0;
风险价值限额=28123;
函数检查重复(x){
if(sumofandancearray.length==0)返回false;
对于(var n=0;nlimit | |检查重复(sumofaundance)==true)中断;
sumofandancearray.push(sumofandance);
总和-=富足之和;
}
}
控制台日志(总和);
似乎错误在于您在代码中输入的最后一个断点(最长的一行)
sumofaundance是两个充裕数的总和,您确实希望限制搜索以使程序运行更快。但是-只有在Sumofaundance大于极限时,才应该打破循环。当你知道你的丰富价值太大的时候
在另一种情况下,不应中断循环。它检查sumofaundance之前是否计数过,但无论您以前是否看到过sumofaundance的值,如果sumofaundance仍然足够小,则必须继续循环
因此,总结一下:在推到SumoFandanceArray并更改totalSum之前,请检查此条件的两个部分,但只有当SumoFandanceArray太大时才中断循环。错误似乎在于您在代码中输入的最后一个中断(最长的一行) sumofaundance是两个充裕数的总和,您确实希望限制搜索以使程序运行更快。但是-只有在Sumofaundance大于极限时,才应该打破循环。当你知道你的丰富价值太大的时候 在另一种情况下,不应中断循环。它检查sumofaundance之前是否计数过,但无论您以前是否看到过sumofaundance的值,如果sumofaundance仍然足够小,则必须继续循环
因此得出结论:在推送到SumofandanceArray并更改totalSum之前,请检查此条件的两个部分,但只有在SumofandanceArray太大时才中断循环。尝试打印所有小于28123的大量数字,不要显示未注释的代码。(评论“一切”的用途——大多数人都能读懂事物是什么(如果不是它们应该是什么的话)。)尽量打印所有小于28123的大量数字,不要显示未注释的代码。(评论“一切”是为了什么——大多数人都能读懂事物是什么(如果不是它们应该是什么的话)。)非常感谢Brenner!!这让我发疯了哈太感谢你了布伦纳!!这让我快发疯了哈哈