เราต้องเขียนฟังก์ชันที่รับตัวเลขสองตัวและคืนค่าต่ำสุดร่วม (LCM) ของพวกมัน
ค่าต่ำสุดร่วม (LCM) คืออะไร?
ค่าต่ำสุดร่วมของตัวเลข a และ b คือจำนวนเต็มบวกที่เล็กที่สุดที่หารด้วย a และ b ลงตัว
ตัวอย่างเช่น - LCM ของ 6 และ 8 คือ 24 เพราะ 24 เป็นจำนวนเต็มบวกที่เล็กที่สุดที่หารด้วย 6 และ 8 ลงตัว
วิธีคำนวณ LCM
หนึ่งในหลายวิธีในการคำนวณ LCM ของ a และ b คือการหารผลคูณของ a และ b ด้วยจำนวนเต็มที่มากที่สุด (ซึ่งรู้จักกันในชื่อ Greatest Common Divisor หรือ GCD) ที่หาร a และ b ลงตัวทั้งคู่
ในกรณีของ 6 และ 8 ผลคูณคือ 48 และจำนวนเต็มที่มากที่สุดที่หารทั้งคู่นั้นคือ 2 ดังนั้น LCM คือ:
(6 * 8) / 2 = 24
เมื่อเข้าใจเรื่องนี้แล้ว มาเขียนโค้ดกัน:
ตัวอย่างโค้ด
const lcm = (a, b) => {
let min = Math.min(a, b);
while (min >= 2) {
if (a % min === 0 && b % min === 0) {
return (a * b) / min;
}
min--;
}
return (a * b);
};
console.log(lcm(6, 8));
console.log(lcm(16, 18));
console.log(lcm(0, 8));
console.log(lcm(11, 28));
console.log(lcm(18, 34));
การเข้าใจโค้ด
เนื่องจากจำนวนเต็มที่มากที่สุดที่หารทั้งสองตัวลงตัวจะยังคงน้อยกว่าหรือเท่ากับตัวเลขที่เล็กกว่าของสองตัวที่เราคำนวณ LCM อยู่ เราจึงรันลูปแบบนับถอยหลังจากตัวเลขที่เล็กกว่าลงมาจนถึง 2
ถ้าในระหว่างการวนลูปเราพบตัวเลขใดตัวหนึ่งที่หารทั้งสองตัวลงตัว เราสามารถรับประกันได้ว่ามันคือตัวเลขที่มากที่สุดที่หารทั้งคู่นั้นลงตัว เพราะเราอยู่ในลูปนับถอยหลัง จึงคืนค่า LCM ทันทีที่นั่น
ถ้าเราวนลูปจนจบ หมายความว่าเราไม่พบตัวเลขแบบนั้น และ 1 คือตัวเลขเดียวที่หารทั้งคู่นั้นลงตัว (ในทางอื่น หมายถึงตัวเลขทั้งสองเป็น coprime) ดังนั้นเราจึงคืนค่าผลคูณของพวกมันโดยตรง
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
24 144 0 308 306