In [1]:
import math
from functools import reduce

In [2]:
def gcd(*numbers):
    return reduce(math.gcd, numbers)

In [3]:
def gcd_list(numbers):
    return reduce(math.gcd, numbers)

In [4]:
print(gcd(27, 18, 9))


9

In [5]:
print(gcd(27, 18, 9, 3))


3

In [6]:
print(gcd([27, 18, 9, 3]))


[27, 18, 9, 3]

In [7]:
print(gcd(*[27, 18, 9, 3]))


3

In [8]:
print(gcd_list([27, 18, 9, 3]))


3

In [9]:
# print(gcd_list(27, 18, 9, 3))
# TypeError: gcd_list() takes 1 positional argument but 4 were given

In [10]:
def lcm_base(x, y):
    return (x * y) // math.gcd(x, y)

In [11]:
def lcm(*numbers):
    return reduce(lcm_base, numbers, 1)

In [12]:
def lcm_list(numbers):
    return reduce(lcm_base, numbers, 1)

In [13]:
print(lcm(27, 18, 9, 3))


54

In [14]:
print(lcm(27, 9, 3))


27

In [15]:
print(lcm(*[27, 9, 3]))


27

In [16]:
print(lcm_list([27, 9, 3]))


27