JavaScript求最大公约数和最小公倍数

本文介绍了如何使用JavaScript计算两个数的最大公约数(GCD)和最小公倍数(LCM)。讲解了欧几里得算法的递归和迭代实现,并指出最大公约数与最小公倍数之间的关系:最小公倍数等于两数乘积除以最大公约数。

一、最大公约数 greatest common divisor

最初级的方法

function gcd(a, b) {
    let result = 1; //最小的公约数是1
    for (let i = 1; i <= a && i <= b; i++) {
        if (a % i == 0 && b % i == 0) {
            result = i;
        }
    }
    return result;
}

欧几里得算法(又称辗转相除法),可采用递归和迭代两种方法实现

该算法依赖的定理是:两个整数的最大公约数等于较小的那个数和两个整数相处余数的最大公约数。

// 假设a>b
gcd(a,b) = gcd(b,a%b)

递归

function DG(a, b) {
    if (b > a) { // 排序 让较大的数在前面
        let temp = a;
        a = b;
        b = temp;
    }
    if (a == b || b == 0) { 
        return a;
    }
    return DG(b, a % b);
}

迭代
迭代即一次次地循环,逼近并得到最终结果,即程序里的循环。
由于预先不知道循环几次,故采用while循环实现。

function DD(a, b) {
    if (a < b) {
        let temp = a;
        a = b;
        b = temp;
    }
    while (b != 0) {
        let remainder = a % b;// 余数
        a = b;
        b = remainder;
    }
    return a;
}

二、最小公倍数 least common multiple

最小公倍数 = 两个数的乘积 / 最大公约数

function lcm(a, b) {
    return (a * b)/gcd(a,b);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值