How to find all sequences of consecutive prime numbers whose sum equals N in TypeScript

1 Answer

0 votes
/**
 * Check whether a number is prime.
 * Uses a √n loop and skips even numbers after 2.
 */
function isPrime(value: number): boolean {
  if (value < 2) return false;
  if (value === 2) return true;
  if (value % 2 === 0) return false;

  const limit: number = Math.floor(Math.sqrt(value));
  for (let d: number = 3; d <= limit; d += 2) {
    if (value % d === 0) return false;
  }
  return true;
}

/**
 * Generate all primes up to N.
 * Any consecutive prime sum equal to N cannot contain primes larger than N.
 */
function generatePrimes(maxN: number): number[] {
  const primes: number[] = [];
  for (let n: number = 2; n <= maxN; n++) {
    if (isPrime(n)) primes.push(n);
  }
  return primes;
}

/**
 * Find all consecutive prime sequences whose sum equals N.
 * Uses a sliding window:
 * - Expand the window by moving the right pointer
 * - Shrink the window by moving the left pointer
 */
function findPrimeConsecutiveSums(N: number): void {
  const primes: number[] = generatePrimes(N);

  let start: number = 0;
  let end: number = 0;
  let sum: number = 0;

  while (true) {
    if (sum < N) {
      if (end === primes.length) break;
      sum += primes[end++];
    } else if (sum > N) {
      sum -= primes[start++];
    } else {
      // Found a valid sequence
      console.log("Sequence:", primes.slice(start, end).join(" "));

      // Continue searching
      sum -= primes[start++];
    }
  }
}

/**
 * main
 */
const N: number = 41;

console.log(`Consecutive prime sequences whose sum equals ${N}:`);
findPrimeConsecutiveSums(N);


/*
run:

Consecutive prime sequences whose sum equals 41:
Sequence: 2 3 5 7 11 13
Sequence: 11 13 17
Sequence: 41

*/

 



answered Jan 28, 2024 by avibootz
edited Aug 19 by avibootz

Related questions

...