LCM (Least Common Multiple) คืออะไร
ค่าต่ำสุดร่วม (LCM) ของจำนวนเต็มสองจำนวน a และ b คือ จำนวนเต็มบวกที่น้อยที่สุดที่หารด้วย a และ b ลงตัว
ตัวอย่าง
LCM ของ 4 และ 6 คือ 12 เพราะ 12 หาร 4 ลงตัว (3) และหาร 6 ลงตัว (2)
ความสัมพันธ์กับ GCD/HCF
LCM(a, b) × GCD(a, b) = a × b
ดังนั้น LCM(a, b) = (a × b) / GCD(a, b)
โค้ดตัวอย่าง (หา HCF แบบ Brute Force)
const num1 = 4;
const num2 = 6;
const findLCM = (num1, num2) => {
let hcf;
// หา HCF (GCD) โดยวนลูป
for (let i = 1; i <= num1 && i <= num2; i++) {
if (num1 % i === 0 && num2 % i === 0) {
hcf = i;
}
}
let lcm = (num1 * num2) / hcf;
return lcm;
};
console.log(findLCM(num1, num2));
ผลลัพธ์
12
วิธีที่ดีกว่า: Euclidean Algorithm (O(log min(a,b)))
// GCD ด้วย Euclidean Algorithm
const gcd = (a, b) => {
while (b !== 0) {
[a, b] = [b, a % b];
}
return a;
};
// LCM ใช้ GCD
const lcm = (a, b) => {
if (a === 0 || b === 0) return 0;
return Math.abs(a * b) / gcd(a, b);
};
// LCM หลายจำนวน
const lcmMultiple = (...numbers) =>
numbers.reduce((acc, val) => lcm(acc, val));
console.log(lcm(4, 6)); // 12
console.log(lcm(21, 6)); // 42
console.log(lcmMultiple(4, 6, 8)); // 24
การประยุกต์ใช้
- การบวก/ลบเศษส่วน (หาตัวหารร่วมน้อย)
- ปัญหาการจัดตารางเวลา (Scheduling)
- Cryptography (RSA)
- Gear Ratios ในวิศวกรรม
สรุป
- โค้ดต้นฉบับใช้ Brute Force O(min(a,b)) - ช้าสำหรับตัวเลขใหญ่
- Euclidean Algorithm เร็วกว่ามาก O(log min(a,b))
- ควรใช้ Math.abs() เพื่อรองรับตัวเลขลบ