如何计算多个数的最小公倍数?
到目前为止,我只能计算两个数字之间的值。但是不知道如何扩展它来计算3个或更多的数字。
到目前为止,我是这样做的
LCM = num1 * num2 / gcd ( num1 , num2 )
使用gcd是计算数字的最大公约数的函数。使用欧几里得算法
但是我不知道如何计算3个或更多的数字。
发布于 2008-09-29 04:37:32
您可以通过迭代计算两个数字的LCM来计算两个以上数字的LCM,即
lcm(a,b,c) = lcm(a,lcm(b,c))
发布于 2008-09-29 04:44:40
在Python中(修改后的primes.py):
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)
用法:
>>> lcmm(100, 23, 98)
112700
>>> lcmm(*range(1, 20))
232792560
reduce()
的工作原理类似于that
>>> f = lambda a,b: "f(%s,%s)" % (a,b)
>>> print reduce(f, "abcd")
f(f(f(a,b),c),d)
发布于 2010-04-15 05:48:39
下面是一个ECMA风格的实现:
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));
}
}
https://stackoverflow.com/questions/147515
复制相似问题