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

การหาจำนวนเฉพาะสองจำนวนที่มีช่องว่างเฉพาะใน JavaScript

ปัญหา

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

ตัวอย่าง

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

const gap = 4;
const range = [20, 200];
const primesInRange = (gap, [left, right]) => {
  const isPrime = num => {
    for (let i = 2; i < num; i++) {
      if (num % i === 0) {
        return false;
      }
    }
    return true;
  };
  const primes = [];
  const res = [];
  for (let i = left; i < right; i++) {
    if (isPrime(i)) {
      primes.push(i);
    }
  }
  let currentNum = primes[0];
  for (let j = 1; j < primes.length; j++) {
    if (primes[j] - currentNum === gap) {
      res.push(currentNum, primes[j]);
      return res;
    } else {
      currentNum = primes[j];
    }
  }
  return null;
};
console.log(primesInRange(gap, range));

ผลลัพธ์

[37, 41]

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

โค้ดหาจำนวนเฉพาะในช่วงด้วย trial division (ช้า) แล้วหาคู่ที่ต่างกัน gap แค่คู่แรก (return ทันที) ควรใช้ Sieve of Eratosthenes และเก็บทุกคู่ ไม่ใช่แค่คู่แรก