Calcula e obtén o máximo común divisor e o mínimo común múltiplo en Python

Negocios

A seguinte é unha descrición de como calcular e obter o máximo común divisor e o mínimo común múltiplo en Python.

  • O máximo común divisor e o mínimo común múltiplo de dous números enteiros
  • O máximo común divisor e o mínimo común múltiplo de tres ou máis números enteiros

Teña en conta que as especificacións das funcións proporcionadas na biblioteca estándar varían dependendo da versión de Python. Neste artigo tamén se mostra un exemplo de implementación dunha función que non está na biblioteca estándar.

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

Aquí explicamos o método usando a biblioteca estándar de Python; NumPy pódese usar facilmente para calcular o máximo común divisor e o mínimo común múltiplo para cada elemento de varias matrices.

O máximo común divisor e o mínimo común múltiplo de dous números enteiros

GCD

Desde Python 3.5, hai unha función gcd() no módulo matemático. gcd() é un acrónimo de

  • greatest common divisor

Devolve o máximo común divisor do número enteiro especificado no argumento.

import math

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

Teña en conta que en Python 3.4 e anteriores, a función gcd() está no módulo de fraccións, non no módulo matemático. débense importar fraccións e fraccións.gcd().

mínimo común denominador

A función lcm(), que devolve o mínimo común múltiplo, engadiuse ao módulo matemático en Python 3.9. lcm é un acrónimo de

  • least common multiple

Devolve o mínimo común múltiplo do número enteiro especificado no argumento.

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

Antes de Python 3.8, lcm() non se proporciona, pero pódese calcular facilmente usando gcd().

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

Exemplo de implementación.

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

print(my_lcm(6, 4))
# 12

/Dado que isto dá lugar a un decimal flotante, úsanse dúas barras invertidas para truncar o punto decimal e devolver un resultado de división enteira. Teña en conta que non se realiza ningún procesamento para determinar se o argumento é un número enteiro ou non.

O máximo común divisor e o mínimo común múltiplo de tres ou máis números enteiros

Python 3.9 ou posterior

A partir de Python 3.9, todas as seguintes funcións admiten máis 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

*Se queres calcular o máximo común divisor ou o mínimo común múltiplo dos elementos dunha lista, especifique o argumento con isto.

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

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

Python 3.8 ou anterior

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

Para atopar o máximo común divisor ou o mínimo común múltiplo de tres ou máis números enteiros, non se precisa un algoritmo particularmente complicado; basta calcular o máximo común divisor ou o mínimo común múltiplo para cada un dos valores múltiples á súa vez usando a función de orde 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 novo, teña en conta que antes de Python 3.4, a función gcd() está no módulo de fracción, non no módulo matemático.

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
Copied title and URL