计算最大公约数和最小公倍数

首先,要想计算最大公约数和最小公倍数,我们可以利用分解质因子的方式,获取两个数的所有质因子,而两个数的最大公约数是两个数相同的质因子的乘积,最小公倍数则是两个数的相同质因子的乘积再乘以他们各自特有的质因子。

比如24和36这两个数,24的质因子是【2,2,2,3】,32的质因子是【2,2,3,3】。两个数的共同质因子是【2,2,3】,因此他们的最大公约数是2*2*3 = 12,两个数特有的质因子是【2】和【3】,因此他们的最小公倍数就是2*2*3*2*3 = 72

清楚以上知识点之后我们就可以往下进行了,下面以‘ 1254,366 ’这两个数为例计算最大公约数和最小公倍数

主函数

主函数中,利用了三个数组,前两个用来存放各自的质因子,第三个数组用来提取出来他们共同的质因子,并且将这些共同的质因子在他们各自的原数组中删除,这样第一个和第二个数组中最后就只剩下他们各自特有的质因子了,在进行质因子相乘,就可以得到最终结果了。

function CommonNumber(num1,num2){
    let arr1 = []           //存放num1的质因子
    let arr2 = []           //存放num2的质因子
    let arr3 = []           //存放num1和num2的共同质因子
    let Num = 1
    let Multiplier = 1
    Decompositionfactor(num1,arr1)
    Decompositionfactor(num2,arr2)
    console.log(arr1,arr2)
    for(let i = 0;i<arr1.length;i++){
        for(let j = 0;j<arr2.length;j++){
            if(arr1[i] == arr2[j]) {
                arr3.push(arr2[j])
                arr2.splice(arr2.indexOf(arr2[j]),1)
                arr1.splice(arr1.indexOf(arr1[i]),1)
                i--
                break
            }
        }
    }
    console.log(arr3)
    for(let i=0;i<arr3.length;i++){
        Num *= arr3[i]
    }
    for(let i=0;i<arr1.length;i++){
        Multiplier *= arr1[i]
    }
    for(let i=0;i<arr2.length;i++){
        Multiplier *= arr2[i]
    }
    Multiplier *= Num
    console.log(Num,Multiplier) 
}

分解质因子

首先这个方法利用了递归的思想,递归结束的条件就是传入的num<=2时return。我们要判断传入的数字是否是质数,如果是质数,就直接存入数组中,否则就将其两个除数继续传入这个方法中,直到他们变成不可再除的质因子存入数组中

function Decompositionfactor(num,arr) {
    if(num<=2) {
        arr.push(num)
        return
    }
    let a = 0
    let b = 0
    let i = 2
    bool = true
    while(i<num/2) {
        if(num%i == 0) {
            bool = false
            break
        }
        i++
    }
    if(bool){
        a = num
        arr.push(a)
        return
    }else {
        a = i
        b = num/i
        Decompositionfactor(a,arr)
        Decompositionfactor(b,arr)
    }
}

在这里插入图片描述
控制台的打印结果可以看到,对1254执行分解质因子的函数后,其分解为了 【2,3,11,19】,对366执行了分解质因子的函数后,其分解为了 【2,3,61】,因此他们的最大公约数就是2*3 = 6,最小公倍数就是2*3*11*19*61=76494

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IsQtion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值