หาตัวเลขที่มี 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) คำนวณโดยตรง