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

การหาตัวเลข n หลักที่น้อยที่สุดที่หารด้วยทุกตัวในอาร์เรย์ลงตัว - JavaScript

หาตัวเลขที่มี n หลัก (n-digit) น้อยที่สุดที่หารด้วยทุกตัวเลขในอาร์เรย์ลงตัว หากไม่มี ให้คืนตัวเลขที่น้อยที่สุดที่หารลงตัว (อาจมีหลักมากกว่า n)

ตัวอย่าง

arr = [12, 4, 5, 10, 9]
n = 2 → 180 (3 หลัก แต่เป็นตัวเล็กที่สุดที่หารลงตัว)
n = 3 → 180

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

const arr = [12, 4, 5, 10, 9];
const num1 = 2;
const num2 = 3;

const allDivides = (arr, num) => arr.every(el => num % el === 0);

const smallestMultiple = (arr, num) => {
  let smallestN = Math.pow(10, num - 1); // ตัวเลข n หลักแรก (10, 100, 1000...)
  while (!allDivides(arr, smallestN)) {
    smallestN++;
  }
  return smallestN;
};

console.log(smallestMultiple(arr, num1)); // 180
console.log(smallestMultiple(arr, num2)); // 180

การทำงาน

  • Math.pow(10, n-1) - ตัวเลข n หลักแรก
  • every() - ตรวจสอบว่าหารลงทุกตัว
  • เพิ่มทีละ 1 จนกว่าจะเจอ (brute force)

ผลลัพธ์

180
180

หมายเหตุ: วิธี brute force ช้าสำหรับตัวเลขใหญ่ ควรใช้ LCM (Least Common Multiple) คำนวณโดยตรง