Функция для GCD и LCM - PullRequest
       22

Функция для GCD и LCM

0 голосов
/ 25 февраля 2020

Мне нужна хорошая функция, чтобы можно было передать список чисел и получить из него GCD или LCM, обычно он говорит:

def computeGCD(x, y): 

   while(y): 
       x, y = y, x % y 

   return x 
>>> computeGCD(30, computeGCD(54, 72))
>>> 6

Но мне нужна функция для получения списка номера, кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Вы можете использовать functools.reduce. Например,

from functools import reduce
list_of_nums = [4, 8, 16, 20]

multiple_gcd = reduce(computeGCD, list_of_nums)  # using your implementation of computeGCD
assert multiple_gcd == 4

Это работает, поскольку GCD и LCM являются ассоциативными.

0 голосов
/ 25 февраля 2020

Это то, с чем я пришел, пытаясь решить мою проблему. Какие-нибудь мысли? Спасибо за отзыв.

def lcm(nums):
    max_ = max(nums)
    i = 1
    while True:
        mult = max_ * i
        if all(mult%nr == 0 for nr in nums):
            return mult
        i += 1

>>> lcm([19, 7, 8])
>>> 1064

и

def __gcd_(x,y):
    while(y):
        x,y=y,x%y
    return x

def gcd(nums):

    if len(nums) == 2:
        return __mdc_(nums[0], nums[1])
    else:
        gcd_val = __gcd_(nums[0], nums[1])
        nums[0] = gcd_val
        del nums[1]
        return gcd(nums)

>> gcd([30, 54, 72])
>> 6
...