📌  相关文章
📜  3的最小倍数,由三个给定的非零数字组成(1)

📅  最后修改于: 2023-12-03 15:29:11.833000             🧑  作者: Mango

以“3的最小倍数,由三个给定的非零数字组成”为主题的程序设计介绍

题目描述

编写一个函数,接收三个非零数字作为输入参数,返回这三个数字的最小公倍数(LCM),同时这个最小公倍数必须是3的倍数。如果不存在这样的最小公倍数,则返回-1。

思路分析
  1. 将三个数字按照从大到小的顺序排列。
  2. 计算出这个数列的最小公倍数LCM。
  3. 用LCM % 3来判断是否存在符合条件的最小公倍数,存在则返回LCM,否则返回-1。
伪代码
function getLCM(n1, n2, n3) {
    //将三个数字按照从大到小的顺序排列
    if (n1 < n2) {
        swap(n1, n2);
    }
    if (n1 < n3) {
        swap(n1, n3);
    }
    if (n2 < n3) {
        swap(n2, n3);
    }
    //计算出这个数列的最小公倍数LCM
    var lcm = n1;
    while (lcm % n2 !== 0 || lcm % n3 !== 0) {
        lcm += n1;
    }
    //用LCM % 3来判断是否存在符合条件的最小公倍数,存在则返回LCM,否则返回-1
    return lcm % 3 === 0 ? lcm : -1;
}

function swap(a,b){
    var temp = a;
    a = b;
    b = temp;
}
复杂度分析

这个方法的时间复杂度为O(LCM),其中LCM指的是三个数的最小公倍数,空间复杂度为O(1)。

测试样例

测试用例1

console.log(getLCM(3, 7, 9)); //输出 63

测试用例2

console.log(getLCM(4, 5, 6)); //输出 -1

测试用例3

console.log(getLCM(1, 2, 3)); //输出 6
总结

本题实现了找到三个数字的最小公倍数,同时必须是3的倍数的功能,这个思路适用于找出任意三个数字的最小公倍数,而且代码实现非常简单。