JavaScript求最小公倍數


文章出自個人博客https://knightyun.github.io/2019/09/03/js-lcm,轉載請申明。


最小公倍數(Least Common Multiple)

最小公倍數是中學數學知識中的一個概念,具體定義可以 自行了解,這裏只大致解釋一下,通常幾個正整數會存在許多個倍數,每個倍數除以這幾個正整數後都沒有餘數,而這些倍數之中最小的一個則稱爲最小公倍數;

一般直接計算最小公倍數較爲困難,因此需要用到一個計算公式,即兩個數的乘積等於這兩個數的最大公約數與最小公倍數的乘積,所以知道兩個數的最大公約數或者求最小公倍數,就可以求得另外一個,接下來先來實現最大公約數的求法;

最大公約數(Greatest Common Divisor)

這也是與最小公倍數相似的另一個概念,幾個正整數之間一般存在多個約數,即這幾個正整數除以這個約數後都沒有餘數,這些約數中最大的一個稱爲最大公約數;下面來實現求最大公約數的函數;

最大質因數法

思路很簡單,即將兩個數分別遞減,獲取能同時被二者除盡的最大的一個數,即最大公約數:

function getGcd(a, b) {
    for (let i = a; i > 0; i--) {
        for (let j = b; j > 0; j--) {
            if (a % i === 0 && b % j === 0 && i === j) {
                return j;
            }
        }
    }
}

輾轉相除法

思路是用兩個數中的最大項除以最小項,如果能除盡,那麼最小項便是這兩個數的最大公約數;不能除盡則用最大項除以最小項所得餘數,與最小項再進行同樣的遞歸操作,最後得到最大的約數,也就是所謂的輾轉相除

function getGcd(a, b) {
    let max = Math.max(a, b);
    let min = Math.min(a, b);
    if (max % min === 0) {
        return min;
    } else {
        return getGcd(max % min, min);
    }
}

求最小公倍數

有了求最大公約數的函數後,再來求最小公倍數就簡單了:

function getLcm(a, b) {
    return a * b / getGcd(a, b);
}

技術文章推送
手機、電腦實用軟件分享
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章