Hướng dẫn how do you find the least common multiple in javascript? - làm cách nào để bạn tìm thấy bội số chung nhỏ nhất trong javascript?

Ban đầu, bạn có thể đã có một luồng tràn chồng vì một lỗi đánh máy: bạn đã chuyển đổi giữa ____10 và

function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
1 ở giữa
function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
2 (bạn sẽ bắt gặp rằng nếu
function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
2 đã được xác định ở hàm bên ngoài). Với đó cố định,
function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
4 trả về 156.

Câu trả lời rõ ràng để tránh tràn ngăn xếp là biến hàm đệ quy thành một hàm không nhận được. Bạn có thể thực hiện điều đó bằng cách làm:

function repeatRecurse(min, max, scm) {
    while ( min < max ) {
        while ( scm % min !== 0 ) {
            scm += max;
        }
        min++;
    }
}

Nhưng có lẽ bạn có thể thấy sai lầm vào thời điểm này: Bạn không đảm bảo rằng

function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
5 vẫn chia hết bởi các yếu tố xuất hiện trước
function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
0. Ví dụ,
function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
7. Thay vì thêm
function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
8, bạn muốn thay thế
function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
5 bằng bội số ít nhất với
function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 
0. Bạn có thể sử dụng RGBCHRIS từ GCD (đối với số nguyên,
function repeatRecurse(min,max,scm) {
    while ( min < max ) {
        scm = lcm(scm,min);
        min++;
    }
    return scm;
}
1 là điều tương tự như
function repeatRecurse(min,max,scm) {
    while ( min < max ) {
        scm = lcm(scm,min);
        min++;
    }
    return scm;
}
2). Nếu bạn muốn giữ cho tối ưu hóa đuôi (mặc dù tôi không nghĩ rằng bất kỳ động cơ JavaScript nào cũng có tối ưu hóa đuôi), bạn sẽ kết thúc với:

function repeatRecurse(min, max, scm) {
    if ( min < max ) {
        return repeatRecurse(min+1, max, lcm(scm,min));
    }
    return scm;
} 

Hoặc không có đệ quy:

function repeatRecurse(min,max,scm) {
    while ( min < max ) {
        scm = lcm(scm,min);
        min++;
    }
    return scm;
}

Điều này về cơ bản tương đương với giải pháp RGBCHRIS. Một phương pháp thanh lịch hơn có thể là phân chia và chinh phục:

function repeatRecurse(min,max) {
    if ( min === max ) {
        return min;
    }
    var middle = Math.floor((min+max)/2);
    return lcm(repeatRecurse(min,middle),repeatRecurse(middle+1,max));
}

Tôi sẽ khuyên bạn nên di chuyển khỏi đối số ban đầu là một mảng gồm hai số. Đối với một điều, nó kết thúc khiến bạn nói về hai mảng khác nhau:

function repeatRecurse(min,max,scm) {
    while ( min < max ) {
        scm = lcm(scm,min);
        min++;
    }
    return scm;
}
3 và mảng phạm vi. Đối với một điều khác, sẽ rất dễ dàng để vượt qua một mảng dài hơn và không bao giờ nhận ra bạn đã làm điều gì đó sai. Nó cũng yêu cầu một số dòng mã để xác định tối thiểu và tối đa, khi những người nên được xác định bởi người gọi.

Cuối cùng, nếu bạn sẽ làm việc với số lượng thực sự lớn, có thể tốt hơn là tìm thấy nhiều người ít phổ biến nhất bằng cách sử dụng yếu tố chính của các số.

Nhiều người ít phổ biến nhất (LCM) của hai số nguyên là số nguyên dương nhỏ nhất hoàn toàn chia hết bởi cả hai số nguyên.LCM) of two integers is the smallest positive integer that is perfectly divisible by both integers.

Ví dụ, LCM của 6 và 8 là 24.6 and 8 is 24.


Ví dụ 1: LCM sử dụng trong khi vòng lặp và nếu câu lệnh

// program to find the LCM of two integers

// take input
const num1 = prompt('Enter a first positive integer: ');
const num2 = prompt('Enter a second positive integer: ');

// higher number among number1 and number2 is stored in min
let min = (num1 > num2) ? num1 : num2;

// while loop
while (true) {
    if (min % num1 == 0 && min % num2 == 0) {
        console.log(`The LCM of ${num1} and ${num2} is ${min}`);
        break;
    }
    min++;
}

Đầu ra

Enter a first positive integer: 6
Enter a second positive integer: 8
The LCM of 6 and 8 is 24

Trong chương trình trên, trước tiên HCF của các số được tính toán. Sau đó LCM được tính toán bằng công thức đã cho.

Nhiều người ít phổ biến nhất (LCM) của hai số nguyên là số nguyên dương nhỏ nhất hoàn toàn chia hết bởi cả hai số nguyên.

Vòng lặp trong khi được sử dụng với câu lệnh

function repeatRecurse(min,max,scm) {
    while ( min < max ) {
        scm = lcm(scm,min);
        min++;
    }
    return scm;
}
4. Trong mỗi lần lặp,

  • Biến
    function repeatRecurse(min, max, scm) {
        if ( min < max ) {
            return repeatRecurse(min+1, max, lcm(scm,min));
        }
        return scm;
    } 
    
    0 được chia cho cả NUM1 và NUM2.
  • Nếu cả hai số còn lại bằng 0, thì đó là LCM và câu lệnh
    function repeatRecurse(min,max,scm) {
        while ( min < max ) {
            scm = lcm(scm,min);
            min++;
        }
        return scm;
    }
    
    6 chấm dứt chương trình.0, then it is the LCM and the
    function repeatRecurse(min,max,scm) {
        while ( min < max ) {
            scm = lcm(scm,min);
            min++;
        }
        return scm;
    }
    
    6 statement terminates the program.
  • Nếu cả hai số còn lại không bằng & nbsp; 0, giá trị của tối thiểu được tăng thêm 1 và vòng lặp tiếp tục.0, the value of min is increased by 1 and the loop continues.
  • Vòng lặp
    function repeatRecurse(min,max,scm) {
        while ( min < max ) {
            scm = lcm(scm,min);
            min++;
        }
        return scm;
    }
    
    7 tiếp tục cho đến khi điều kiện được đáp ứng.
    if (min % num1 == 0 && min % num2 == 0)

LCM của hai số cũng có thể được tìm thấy bằng cách sử dụng công thức:

LCM = (num1*num2) / HCF

Để tìm hiểu về cách tìm HCF, hãy truy cập chương trình JavaScript để tìm HCF.

Ví dụ 2: Tính toán LCM sử dụng HCF

// program to find the LCM of two integers

let hcf;
// take input
const number1 = prompt('Enter a first positive integer: ');
const number2 = prompt('Enter a second positive integer: ');

// looping from 1 to number1 and number2 to find HCF
for (let i = 1; i <= number1 && i <= number2; i++) {

    // check if is factor of both integers
    if( number1 % i == 0 && number2 % i == 0) {
        hcf = i;
    }
}

// find LCM
let lcm = (number1 * number2) / hcf;

// display the hcf
console.log(`HCF of ${number1} and ${number2} is ${lcm}.`);

Đầu ra

Enter a first positive integer: 6
Enter a second positive integer: 8
The LCM of 6 and 8 is 24.

Trong chương trình trên, trước tiên HCF của các số được tính toán. Sau đó LCM được tính toán bằng công thức đã cho.