Calcular y obtener el máximo común divisor y el mínimo común múltiplo en Python

Negocio

A continuación se describe cómo calcular y obtener el máximo común divisor y el mínimo común múltiplo en Python.

  • El máximo común divisor y el mínimo común múltiplo de dos enteros
  • El máximo común divisor y el mínimo común múltiplo de tres o más números enteros

Tenga en cuenta que las especificaciones de las funciones proporcionadas en la biblioteca estándar difieren según la versión de Python. En este artículo también se muestra un ejemplo de implementación de una función que no está en la biblioteca estándar.

  • Python 3.4 o anterior
    • GCD:fractions.gcd()(sólo dos argumentos)
  • Python 3.5 o posterior
    • GCD:math.gcd()(sólo dos argumentos)
  • Python 3.9 o posterior
    • GCD:math.gcd()(admite más de tres argumentos)
    • mínimo común denominador:math.lcm()(admite más de tres argumentos)

Aquí explicamos el método utilizando la biblioteca estándar de Python; NumPy puede utilizarse fácilmente para calcular el máximo común divisor y el mínimo común múltiplo para cada elemento de múltiples matrices.

El máximo común divisor y el mínimo común múltiplo de dos enteros

GCD

Desde Python 3.5, existe una función gcd() en el módulo de matemáticas. gcd() es un acrónimo de

  • greatest common divisor

Devuelve el máximo común divisor del entero especificado en el argumento.

import math

print(math.gcd(6, 4))
# 2

Tenga en cuenta que en Python 3.4 y anteriores, la función gcd() está en el módulo de fracciones, no en el módulo de matemáticas. hay que importar fractions y fractions.gcd().

mínimo común denominador

La función lcm(), que devuelve el mínimo común múltiplo, se añadió al módulo matemático en Python 3.9. lcm es un acrónimo de

  • least common multiple

Devuelve el mínimo común múltiplo del entero especificado en el argumento.

print(math.lcm(6, 4))
# 12

Antes de Python 3.8, lcm() no se proporciona, pero se puede calcular fácilmente utilizando gcd().

lcm(a, b) = a * b / gcd(a, b)

Ejemplo de aplicación.

def my_lcm(x, y):
    return (x * y) // math.gcd(x, y)

print(my_lcm(6, 4))
# 12

/Como esto resulta en un flotador decimal, se utilizan dos barras invertidas para truncar el punto decimal y devolver un resultado de división entero. Tenga en cuenta que no se realiza ningún procesamiento para determinar si el argumento es un entero o no.

El máximo común divisor y el mínimo común múltiplo de tres o más números enteros

Python 3.9 o posterior

A partir de Python 3.9, todas las funciones siguientes admiten más de tres argumentos.

  • math.gcd()
  • math.lcm()
print(math.gcd(27, 18, 9))
# 9

print(math.gcd(27, 18, 9, 3))
# 3

print(math.lcm(27, 9, 3))
# 27

print(math.lcm(27, 18, 9, 3))
# 54

*Si quieres calcular el máximo común divisor o el mínimo común múltiplo de los elementos de una lista, especifica el argumento con esto.

l = [27, 18, 9, 3]
print(math.gcd(*l))
# 3

print(math.lcm(*l))
# 54

Python 3.8 o anterior

Antes de Python 3.8, la función gcd() sólo admitía dos argumentos.

Para encontrar el máximo común divisor o el mínimo común múltiplo de tres o más números enteros, no es necesario ningún algoritmo especialmente complicado; basta con calcular el máximo común divisor o el mínimo común múltiplo para cada uno de los valores de los múltiplos, utilizando la función de orden superior reduce().

GCD

from functools import reduce

def my_gcd(*numbers):
    return reduce(math.gcd, numbers)

print(my_gcd(27, 18, 9))
# 9

print(my_gcd(27, 18, 9, 3))
# 3

l = [27, 18, 9, 3]
print(my_gcd(*l))
# 3

De nuevo, ten en cuenta que antes de Python 3.4, la función gcd() está en el módulo de fracciones, no en el de matemáticas.

mínimo común denominador

def my_lcm_base(x, y):
    return (x * y) // math.gcd(x, y)

def my_lcm(*numbers):
    return reduce(my_lcm_base, numbers, 1)

print(my_lcm(27, 9, 3))
# 27

print(my_lcm(27, 18, 9, 3))
# 54

l = [27, 18, 9, 3]
print(my_lcm(*l))
# 54