Tell us what’s happening:
In high level, does my push() then filter() good approach?
Can you suggest better approach? because I can’t pass sumPrimes(977), my filter produces lots of false positives in large numbers. Thanks you!
Your code so far
function sumPrimes(num) {
if (num < 2) return 0;
const arr = [];
// push all digits before num
for (let i = num; i > 0; i--)
{
arr.push(i);
}
// filter by prime
const filtered = arr.filter((num) => {
console.log()
console.log("num: " + num);
let successDivideCounter = 0;
// divide to see who's divisible
for (let i = 2; i < num; i++) {
if (Number.isInteger(num / i)) {
console.log("i: " + i + " quotient: " + num / i)
if (i === 2) {
successDivideCounter += 2;
} else if (i === 9 && num >= 18) {
successDivideCounter += 2;
} else if (i === 8 && num >= 16) {
successDivideCounter += 2;
} else if (i === 7 && num >= 14) {
successDivideCounter += 2;
} else if (i === 6 && num >= 12) {
successDivideCounter += 2;
} else if (i === 5 && num >= 10) {
successDivideCounter += 2;
} else if (i === 4 && num >= 8) {
successDivideCounter += 2;
} else if (i === 3 && num >= 6) {
successDivideCounter += 2;
} else {
successDivideCounter++;
}
} else {
console.log(num / i)
}
}
console.log("success divides: " + successDivideCounter);
return successDivideCounter < 2;
})
filtered.pop(); // remove 1
filtered.push(2); // add 2
console.log(JSON.stringify(filtered));
const sum = filtered.reduce((acc, curr) => curr + acc, 0);
return sum;
}
console.log("final: " + sumPrimes(977));
// res 1: 246,903
// res 2: 192,041
// res 3: 164,596
// res 4: 127,738
// res 5: 108,789
// expected: 73,156
Your browser information:
User Agent is: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36
Challenge Information:
Build a Prime Number Sum Calculator - Build a Prime Number Sum Calculator