C. Функциональный НОД 2.0

Напишите функцию gcd, которая вычисляет наибольший общий делитель последовательности чисел.
Параметрами функции выступают натуральные числа в произвольном количестве, но не менее одного.

Примечание

Ваше решение должно содержать только функции.
В решении не должно быть вызовов требуемых функций.

Пример

Ввод

result = gcd(3)

Вывод

result =  3

Ввод

result = gcd(36, 48, 156, 100500)

Вывод

result =  12

Решение

Развитие задач B. Функциональный НОД и F. НОД 2.0.

Фактически нам надо «скрестить» первую задачу со второй. Цель задачи — научить работать с переменным количеством входных данных с с помощью конструкции *args.

Посмотреть код

Решение

Python
# типовое решение

def gcd(*args):
    a = list(args)
    while len(a) > 1:
        while a[-1]:
            a[0], a[-1] = a[-1], a[0] % a[-1]
        a.pop()
    return a[0]

Решение

Python
# типовое решение

def gcd(*numbers):
    result = numbers[0]
    for x in numbers[1:]:
        while x:
            result, x = x, result % x
    return result

Решение

Python
# лаконичное решение

def gcd(*numbers):
    a, *tail = numbers
    for b in tail:
        while b:
            a, b = b, a % b
    return a
Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Илья
Илья
09.11.2025 19:05

Почему тесты выдают ошибку этому коду? Вроде, логика верна и ошибок в написании нет. Гуглил, спросил у нейросети, но не смог найти ответа.

from functools import reduce


def gcd(*numbers):
    def gcd_2_args(a, b):
        while b:
            a, b = b, a % b
        return a

    return reduce(gcd_2_args, numbers)