gpt4 book ai didi

javascript - 嵌套 ES6 数组辅助方法以生成素数数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:16 25 4
gpt4 key购买 nike

所以我想编写一个函数,返回所有素数的总和,直到并包括提供的数字。

我已经写了这个,它有效:

function sumPrimes(num) {
const arr = Array.from({length: num+1}, (v, k) => k).slice(2);
return arr.filter(element => {
for(let i = 2; i < element; i++) {
if(element % i === 0) {
return false;
}
}
return element;
}).reduce((previous, current) => {
return previous += current;
}, 0);
}

sumPrimes(9);

我在想,如果将 for 循环替换为另一个数组辅助方法,它看起来会更整洁。然而,我正在努力实现这一点。

这是我目前所得到的:

function sumPrimes(num) {
const arr = Array.from({length: num+1}, (v, k) => k).slice(2);
return arr.filter(element => {
return arr.find(ref => {
console.log("(" + element + " % " + ref + " === 0) " + (element % ref === 0));
if(element % ref === 0) { return false; }
return true;
});
}).reduce((previous, current) => {
return previous += current;
}, 0);
}

sumPrimes(20);

这样写,函数不再按预期工作——它不过滤任何数字,所以所有数字都由 .reduce 助手求和。控制台使它看起来像 if 语句仍在按预期工作;我做错了什么?

最佳答案

您可以缩小对 n at sqrt(n) 素数的研究范围:

var isPrime = n => n===2 ? true : Array(Math.ceil(Math.sqrt(n))+1).fill().map((e,i)=>i).slice(2).every(m => n%m);

var sumPrimes = num => Array(num).fill().map((e,i)=>i+1).slice(1).filter(isPrime).reduce((a,b) => a+b);

console.log(sumPrimes(9));

关于javascript - 嵌套 ES6 数组辅助方法以生成素数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41429357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com