function isPrime(number) {
if (number == 1 || number == 0) {return false}
const threshold = Math.ceil(Math.sqrt(number))
for (let i = 2; i < threshold+ 1; i++) {
if ( number % i === 0) {
return false;
}
}
return true;
}
function fillPrimeArray(upperThreshold) {
const resultArr = [];
for (let i = 0; i <= upperThreshold; i++) {
if (isPrime(i)) {
resultArr.push(i);
}
}
return resultArr;
}
// console.log(fillPrimeArray(1000000));
function findPrimeWithLongestConsecutive(upperThreshold) {
const primeArr = [...fillPrimeArray(upperThreshold)]
const optimum = {
sum: 0,
numberOfSummands: 0,
firstSummand: 0,
lastSummand: 0
}
const current = {
sum: primeArr[0],
numberOfSummands: 1,
firstSummand: primeArr[0],
lastSummand: primeArr[0],
optimumTradeOff: 0,
optimumNumberOfSummands: 0
}
// We do not need to check above i=1000 definetly...
for (let i = 1; i < 1000; i++) {
for (let j = i + current.numberOfSummands; j < primeArr.length; j++) {
current.lastSummand = primeArr[j];
current.numberOfSummands += 1;
current.sum += primeArr[j];
if (current.sum > upperThreshold) {continue}
if (isPrime(current.sum) && current.numberOfSummands > optimum.numberOfSummands) {
optimum.numberOfSummands = current.numberOfSummands;
optimum.firstSummand = current.firstSummand;
optimum.lastSummand = current.lastSummand;
optimum.sum = current.sum
current.optimumTradeOff = current.sum
current.optimumNumberOfSummands = optimum.numberOfSummands
}
}
current.firstSummand = primeArr[i];
current.optimumNumberOfSummands = current.optimumNumberOfSummands - 1 ;
current.numberOfSummands = current.optimumNumberOfSummands;
current.optimumTradeOff = current.optimumTradeOff - primeArr[i-1]
current.sum = current.optimumTradeOff;
// console.log(i)
// console.log(current)
// console.log(optimum)
}
return optimum;
}
console.log(findPrimeWithLongestConsecutive(1000000))