首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >3个或更多数字的最小公倍数

3个或更多数字的最小公倍数
EN

Stack Overflow用户
提问于 2008-09-29 04:33:16
回答 27查看 157.6K关注 0票数 167

如何计算多个数的最小公倍数?

到目前为止,我只能计算两个数字之间的值。但是不知道如何扩展它来计算3个或更多的数字。

到目前为止,我是这样做的

代码语言:javascript
复制
LCM = num1 * num2 /  gcd ( num1 , num2 )

使用gcd是计算数字的最大公约数的函数。使用欧几里得算法

但是我不知道如何计算3个或更多的数字。

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2008-09-29 04:37:32

您可以通过迭代计算两个数字的LCM来计算两个以上数字的LCM,即

代码语言:javascript
复制
lcm(a,b,c) = lcm(a,lcm(b,c))
票数 194
EN

Stack Overflow用户

发布于 2008-09-29 04:44:40

在Python中(修改后的primes.py):

代码语言:javascript
复制
def gcd(a, b):
    """Return greatest common divisor using Euclid's Algorithm."""
    while b:      
        a, b = b, a % b
    return a

def lcm(a, b):
    """Return lowest common multiple."""
    return a * b // gcd(a, b)

def lcmm(*args):
    """Return lcm of args."""   
    return reduce(lcm, args)

用法:

代码语言:javascript
复制
>>> lcmm(100, 23, 98)
112700
>>> lcmm(*range(1, 20))
232792560

reduce()的工作原理类似于that

代码语言:javascript
复制
>>> f = lambda a,b: "f(%s,%s)" % (a,b)
>>> print reduce(f, "abcd")
f(f(f(a,b),c),d)
票数 150
EN

Stack Overflow用户

发布于 2010-04-15 05:48:39

下面是一个ECMA风格的实现:

代码语言:javascript
复制
function gcd(a, b){
    // Euclidean algorithm
    while (b != 0){
        var temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

function lcm(a, b){
    return (a * b / gcd(a, b));
}

function lcmm(args){
    // Recursively iterate through pairs of arguments
    // i.e. lcm(args[0], lcm(args[1], lcm(args[2], args[3])))

    if(args.length == 2){
        return lcm(args[0], args[1]);
    } else {
        var arg0 = args[0];
        args.shift();
        return lcm(arg0, lcmm(args));
    }
}
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/147515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档