开发者

Lowest common multiple for all pairs in a list

I have some code that calculates the lowest common multiple for a list of numbers. I would like to modify this code to return a list of values that represents the lowest common multiple for each pair in my number list.

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

If the input is [3, 5, 10] the output would be [lcm(5,10)=10, lcm(3,5)=15, lcm(3,10)=30] (sorting not required).

I feel like there is some elegant way of calculating this list of lowest common multiples but I'm not able to grasp it without some example.


What you have looks good. I'd only change how you produce the answer:

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

where I'm using combinations from itertools.


Given your existing functions (with __gcd() edited to return a, rather than none):

from itertools import combinations

inlist = [3, 5, 10]

print [lcm(pair) for pair in combinations(inlist, 2)]
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜