查找3和5的倍数之和,JS
查找3和5的倍数之和,JS
我被给定一个数字,需要找到3和5的倍数的和小于这个数字。
例如:
20 => 78 = 3 + 5 + 6 + 9 + 10 + 12 + 15 + 18
我的代码可以工作,但对于大于1,000,000的数字来说就不行了(我测试了100,000,结果需要2秒延迟才能得到)。所以,需要进行优化。有人可以帮助我吗?为什么我的代码运行缓慢?谢谢。
我的逻辑如下:
- 将倍数添加到数组中
- 过滤重复的值
- 求和所有值
我的代码:
function sumOfMultiples(number) { let numberBelow = number - 1; let numberOfThrees = Math.floor(numberBelow / 3); let numberOfFives = Math.floor(numberBelow / 5); let multiples = []; let multipleOfThree = 0; let multipleOfFive = 0; for (var i = 0; i < numberOfThrees; i++) { multiples.push(multipleOfThree += 3); } for (var j = 0; j < numberOfFives; j++) { multiples.push(multipleOfFive += 5); } return multiples .filter((item, index) => multiples.indexOf(item) === index) .reduce((a, b) => a + b); }