Javascript Euler问题5的解决方案:我的代码没有';行不通

Javascript Euler问题5的解决方案:我的代码没有';行不通,javascript,math,Javascript,Math,我对Euler项目挑战5有问题。挑战在于找到一个最小的正数,这个正数可以被1到20之间的所有数字整除。这是我的代码: let i = 1; function myFunction (num) { return i % num == 0 } while (true) { let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] if (arr.every(myFunction))

我对Euler项目挑战5有问题。挑战在于找到一个最小的正数,这个正数可以被1到20之间的所有数字整除。这是我的代码:

let i = 1;
function myFunction (num) {
  return i % num == 0
}
while (true) {
  let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
  if (arr.every(myFunction)) {
    console.log(i)
    break;
  } else {
    i++
    continue;
  }
}
数字16之前的代码工作正常(720720),但一旦我向数组中添加另一个数字,按顺序(16、17、18…)它就不再工作了。我不知道为什么,我对编程很陌生。如果你能告诉我。

解决了:

您需要在myFunction中返回一个条件,以使array.every正常工作:

设i=1;
函数myFunction(num){
变量结果=i/num
在此处返回parseInt(result)==result//条件以检查结果是否为int
}
while(true){
设arr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
if(arr.every(myFunction)){
控制台日志(i)
打破
}否则{
我++
继续;
}
}

这样做(大约20秒后)我们得到了正确的结果:232792560

上面的答案需要很长的时间,就像他说的,相当长的时间

此代码较长,但得出结果所需的时间不到一秒钟

const divisibleByAllToN = (n) => {
  const twoToN = Array(n - 1)
    .fill(2)
    .map((item, index) => item + index);

  let numbersToBeMultiplied = twoToN.filter((item) => {
    for (var i = 2; i < item; i++) if (item % i === 0) return false;
    return item > 1;
  });

  numbersToBeMultiplied = numbersToBeMultiplied.map((item) => {
    let value = item;
    while (value * item <= n) {
      value = value * item;
    }
    return value;
  });
  return numbersToBeMultiplied.reduce((acc, val) => acc * val);
};

divisibleByAllToN(20);
const divisibleByAllToN=(n)=>{
常数twoToN=数组(n-1)
.填写(2)
.map((项目,索引)=>项目+索引);
let numbersToBeMultiplied=twoToN.filter((项)=>{
对于(变量i=2;i1;
});
numbersToBeMultiplied=numbersToBeMultiplied.map((项目)=>{
让值=项目;
while(值*项目acc*val);
};
可除数比尔顿(20);

我对数学不感兴趣,你的意思是它是可除的,并给出一个整数作为除法的结果吗?例如:1可以被1除,因为余数等于0;2可以被1和2除,原因相同;6可以被3、2和1除,因为%等于0。2520可以被10、9、8、7、6、5、4、3、2、1除,因为%等于0。除此之外,任何数字都不能在被所有数字除的上下文中使用除法运算符而不给出小数。对不起,对不起。我问了错误的问题,这是正确的条件:返回I%num==0。代码检查“I”是否可被1到20之间的所有数字除。