Вопрос

В настоящее время я использую этот код, чтобы найти 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] и т. Д.? Я ограничен петлями?

Это было полезно?

Решение

Как упоминалось Крис Дж. это Таким образом, вопрос обеспечивает алгоритм. Вот версия ответа Python, которая использует reduce встроенный и fractions модуль, который существует с момента версии 2.6.

import fractions

def gcd(*values):
    return reduce(fractions.gcd, values)

Другие советы

from fractions import gcd
def lcm(a, b):
    return (a * b) // gcd(a, b)

Вы можете использовать рекурсивную технику:

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

Храните все свои значения GCD на карте хэш. Таким образом, когда он делает рекурсивный шаг, он сначала обращается к хеш -карте, чтобы увидеть, был ли GCD меньших чисел уже вычислен, что сэкономит много времени, если вы делаете это для большого диапазона входов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top