Bereken en verkrijg de grootste gemene deler en kleinste gemene veelvoud in Python

Bedrijf

Hieronder volgt een beschrijving van het berekenen en verkrijgen van de grootste gemene deler en het kleinste gemene veelvoud in Python.

  • De grootste gemene deler en het kleinste gemene veelvoud van twee gehele getallen
  • De grootste gemene deler en het kleinste gemene veelvoud van drie of meer gehele getallen

Merk op dat de specificaties van functies in de standaard bibliotheek verschillen afhankelijk van de Python versie. Een voorbeeldimplementatie van een functie die niet in de standaardbibliotheek staat, wordt ook in dit artikel getoond.

  • Python 3.4 of eerder
    • GCD:fractions.gcd()(slechts twee argumenten)
  • Python 3.5 of later
    • GCD:math.gcd()(slechts twee argumenten)
  • Python 3.9 of later
    • GCD:math.gcd()(ondersteunt meer dan drie argumenten)
    • kleinste gemene deler:math.lcm()(ondersteunt meer dan drie argumenten)

Hier leggen we de methode uit met behulp van de standaard Python bibliotheek; NumPy kan gemakkelijk gebruikt worden om de grootste gemene deler en het kleinste gemene veelvoud te berekenen voor elk element van meerdere arrays.

De grootste gemene deler en het kleinste gemene veelvoud van twee gehele getallen

GCD

Sinds Python 3.5, is er een gcd() functie in de wiskunde module. gcd() is een acroniem voor

  • greatest common divisor

Geeft als resultaat de grootste gemene deler van het gehele getal dat in het argument staat.

import math

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

Merk op dat in Python 3.4 en eerder, de gcd() functie in de fracties module zit, niet in de wiskunde module. fracties moet worden geïmporteerd en fracties.gcd().

kleinste gemene deler

De functie lcm(), die het kleinste gemene veelvoud teruggeeft, werd toegevoegd aan de wiskundemodule in Python 3.9. lcm is een acroniem voor

  • least common multiple

Geeft als resultaat het kleinste gemene veelvoud van het gehele getal dat in het argument is opgegeven.

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

Vóór Python 3.8, is lcm() niet voorzien, maar kan gemakkelijk berekend worden met gcd().

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

Uitvoeringsvoorbeeld.

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

print(my_lcm(6, 4))
# 12

/Omdat dit resulteert in een decimale float, worden twee backslashes gebruikt om de decimale punt af te kappen en een integer delingsresultaat te geven. Merk op dat er geen bewerking wordt uitgevoerd om te bepalen of het argument een geheel getal is of niet.

De grootste gemene deler en het kleinste gemene veelvoud van drie of meer gehele getallen

Python 3.9 of later

Vanaf Python 3.9 ondersteunen alle volgende functies meer dan drie argumenten.

  • 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

*Als je de grootste gemene deler of het kleinste gemene veelvoud van de elementen van een lijst wil berekenen, geef je het argument met dit op.

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

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

Python 3.8 of eerder

Vóór Python 3.8 ondersteunde de functie gcd() slechts twee argumenten.

Om de grootste gemene deler of het kleinste gemene veelvoud van drie of meer gehele getallen te vinden, is geen bijzonder ingewikkeld algoritme nodig; bereken gewoon de grootste gemene deler of het kleinste gemene veelvoud voor elk van de veelvoudswaarden op zijn beurt met behulp van de hogere-orde functie 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

Nogmaals, merk op dat vóór Python 3.4, de gcd() functie in de breukmodule zit, en niet in de wiskunde module.

kleinste gemene deler

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