Самый низкий общий множитель для всех пар в списке - PullRequest
1 голос
/ 10 сентября 2010

У меня есть код, который вычисляет наименьшее общее кратное для списка чисел. Я хотел бы изменить этот код, чтобы он возвращал список значений, представляющих наименьшее общее кратное число для каждой пары в моем списке номеров.

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 ]

4 голосов
/ 10 сентября 2010

То, что у тебя хорошо выглядит.Я бы изменил только то, как вы получите ответ:

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

, где я использую комбинации из itertools.

3 голосов
/ 10 сентября 2010

Учитывая ваши существующие функции (с __gcd () отредактировано, чтобы вернуть a, а не ничего):

from itertools import combinations

inlist = [3, 5, 10]

print [lcm(pair) for pair in combinations(inlist, 2)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...