Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript euler qn 23项目_Javascript_Algorithm - Fatal编程技术网

Javascript euler qn 23项目

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的整数都可以写成两个富足数之和。然而,通过分析无法进一步降低该上限,即使已知不能表示为两个丰富数之和的最大数小于该上限 求所有不能写成两个富足数之和的正整数之和

一个完全数是一个数,它的适当因子之和正好等于这个数。例如,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);
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!!这让我发疯了哈太感谢你了布伦纳!!这让我快发疯了哈哈