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

หา LCM (ค่าต่ำสุดร่วม) ของสองจำนวนใน JavaScript

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() เพื่อรองรับตัวเลขลบ