【发布时间】:2022-11-15 06:29:07
【问题描述】:
我正在解决一个 JavaScript 挑战问题查找具有相同除数的数字并且在涉及 for 循环的代码末尾遇到了一些麻烦。
问题:
找到 1 和
NMax之间的所有数字对,它们是diff数字分开并共享相同数量的除数。例如:对于 1 到 50 之间的数字,有 8 个数字共享相同的约数:[[2,3]、[14,15]、[21,22]、[26,27]、[33、34 ], [34, 35], [38, 39], [44, 45]]
在我下面的代码中,
count_pairsInt(1,50)将返回 8,而count_pairsInt (3,100)将返回TypeError: Cannot read properties of undefined (reading '1')。我几乎可以肯定在最后一个 for 循环中出现了问题,但我不太清楚它是什么。有人可以帮帮我吗?
function countPairsInt(diff, nMax) { const numbers = []; for (let i=1; i<=nMax; i++) { numbers.push(i); } // divisors loops over each number passed in and returns the number of divisors for that number function divisors(num) { let divs = []; for (let i=1; i<=num; i++) { if (num % i === 0) divs.push(i); } return divs; } // create an array of arrays, each subarray contains the number and it's number of divisors by passing map over the numbers array. const numsAndDivs = numbers.map(x=> [x, divisors(x).length]); let equalDivs = 0; for (let i=1; i<numsAndDivs.length-1; i++) { if (numsAndDivs[i][1] === numsAndDivs[i+diff][1] ){ equalDivs++; } } return equalDivs } countPairsInt(1, 50); // returns 8 countPairsInt(3, 100) // should return 7
【问题讨论】:
标签: javascript loops math