Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การหาคู่จำนวนเฉพาะที่ผลรวมเท่ากับตัวเลขที่กำหนดใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับตัวเลข n ฟังก์ชันควรคืนค่าอาร์เรย์ของคู่ตัวเลขทั้งหมด ที่ผลรวมเท่ากับ n และทั้งคู่เป็นจำนวนเฉพาะ

ตัวอย่าง

โค้ดตัวอย่างด้านล่าง:

const num = 26;
const isPrime = (n) => {
  if (n % 2 === 0) return false;
  let sqrtn = Math.sqrt(n) + 1;
  for (let i = 3; i < sqrtn; i += 2) {
    if (n % i === 0) return false;
  }
  return true;
};
const primeList = (a) => {
  if (isPrime(a)) return a; else return false;
};
const generateNumbers = (n) => {
  let num = (n % 2 === 0) ? (n - 1) : n;
  let list = [];
  for (let i = num; i > 3; i -= 2) list.push(i);
  list.push(3, 1);
  return list;
};
const calculate = (num, list, results) => {
  if (list.length === 0) return results;
  let item = list.shift();
  let itemPairIndex = list.indexOf(num - item);
  if (itemPairIndex !== -1) {
    let itemPair = list.splice(itemPairIndex, 1);
    results.push(item + "+" + itemPair);
  }
  return calculate(num, list, results);
};
const findprimeSum = (num) => {
  const pairs = [];
  const list = generateNumbers(num).filter(primeList);
  return calculate(num, list, []);
};
console.log(findprimeSum(num));

ผลลัพธ์

[ '23+3', '19+7' ]

คำอธิบายเพิ่มเติม

นี่คือการตรวจสอบ 추측ของ Goldbach (Goldbach's conjecture) สำหรับเลขคู่ โค้ดใช้ recursion และ filter จำนวนเฉพาะ สามารถปรับปรุงได้ด้วย Sieve of Eratosthenes สำหรับหาจำนวนเฉพาะทั้งช่วงพร้อมกัน