1

我目前使用此代码查找 gcd 和 lcm

def gcd(a, b):
    while b != 0:
        a, b = b, a%b
    return a

def lcm(a, b):
    result = a*b/gcd(a,b)
    return result

但是,如果我想为数字列表执行此操作,例如 [4,5,7,1,5,7,10,1,16,24] 等,该怎么办?我是否受限于循环?

4

3 回答 3

1
from fractions import gcd
def lcm(a, b):
    return (a * b) // gcd(a, b)
于 2015-07-23T21:53:25.403 回答
0

您可以使用递归技术:

def gcd(a, b):
   if b == 0:
      return a
   else:
      return gcd(b, a%b)

将所有 GCD 值存储在哈希图中。因此,当它执行递归步骤时,它首先访问哈希映射以查看是否已经计算了较小数字的 GCD,如果您对大范围的输入执行此操作,这将节省大量时间。

于 2012-01-10T17:08:02.237 回答
0

正如 Chris J 所提到的,这个SO question 提供了算法。这是答案的 python 版本,它使用自 2.6 版以来一直存在的reduce内置模块和模块。fractions

import fractions

def gcd(*values):
    return reduce(fractions.gcd, values)
于 2012-01-11T01:28:05.470 回答