代码之家  ›  专栏  ›  技术社区  ›  Eric Schoonover thSoft

列表中所有对的最低公共倍数

  •  1
  • Eric Schoonover thSoft  · 技术社区  · 14 年前

    我有一些代码可以计算一系列数字的最小公倍数。我想修改这段代码以返回一个值列表,该值表示数字列表中每对的最小公倍数。

    def lcm(numbers):
        return reduce(__lcm, numbers)
    
    def __lcm(a, b):
        return ( a * b ) / __gcd(a, b)
    
    def __gcd(a, b):
        a = int(a)
        b = int(b)
        while b:
            a,b = b,a%b
        return a
    

    [3, 5, 10] 输出将是 [lcm(5,10)=10, lcm(3,5)=15, lcm(3,10)=30] (不需要排序)。

    我觉得有一种优雅的方法可以计算出这个最小公倍数的列表,但如果没有一些例子,我就无法理解它。

    2 回复  |  直到 14 年前
        1
  •  4
  •   wheaties    14 年前

    def lcm(numbers):
        return map(__lcm, combinations( numbers, 2 ) )
    

    我用的是什么 combinations

        2
  •  3
  •   kindall    14 年前

    给定您现有的函数(编辑uu gcd()以返回a,而不是无):

    from itertools import combinations
    
    inlist = [3, 5, 10]
    
    print [lcm(pair) for pair in combinations(inlist, 2)]