Výpočet a získanie najväčšieho spoločného deliteľa a najmenšieho spoločného násobku v jazyku Python

obchodné

Nasleduje opis výpočtu a získania najväčšieho spoločného deliteľa a najmenšieho spoločného násobku v jazyku Python.

  • Najväčší spoločný deliteľ a najmenší spoločný násobok dvoch celých čísel
  • Najväčší spoločný deliteľ a najmenší spoločný násobok troch alebo viacerých celých čísel

Všimnite si, že špecifikácie funkcií poskytovaných v štandardnej knižnici sa líšia v závislosti od verzie jazyka Python. V tomto článku je uvedený aj príklad implementácie funkcie, ktorá nie je v štandardnej knižnici.

  • Python 3.4 alebo starší
    • GCD:fractions.gcd()(iba dva argumenty)
  • Python 3.5 alebo novší
    • GCD:math.gcd()(iba dva argumenty)
  • Python 3.9 alebo novší
    • GCD:math.gcd()(podporuje viac ako tri argumenty)
    • najmenší spoločný menovateľ:math.lcm()(podporuje viac ako tri argumenty)

Tu vysvetlíme metódu pomocou štandardnej knižnice Pythonu; NumPy možno ľahko použiť na výpočet najväčšieho spoločného deliteľa a najmenšieho spoločného násobku pre každý prvok viacerých polí.

Najväčší spoločný deliteľ a najmenší spoločný násobok dvoch celých čísel

GCD

Od verzie Python 3.5 je v matematickom module funkcia gcd(). gcd() je skratka pre

  • greatest common divisor

Vráti najväčší spoločný deliteľ celého čísla zadaného v argumente.

import math

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

Všimnite si, že v Pythone 3.4 a starších verziách sa funkcia gcd() nachádza v module fractions, nie v module math. fractions musí byť importovaná a fractions.gcd().

najmenší spoločný menovateľ

Funkcia lcm(), ktorá vracia najmenší spoločný násobok, bola pridaná do matematického modulu v jazyku Python 3.9. lcm je skratka pre

  • least common multiple

Vráti najmenší spoločný násobok celého čísla zadaného v argumente.

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

Pred verziou Python 3.8 funkcia lcm() nie je k dispozícii, ale možno ju ľahko vypočítať pomocou funkcie gcd().

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

Príklad implementácie.

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

print(my_lcm(6, 4))
# 12

/Keďže výsledkom je desatinné číslo typu float, na skrátenie desatinnej čiarky a vrátenie celočíselného výsledku delenia sa použijú dve spätné lomítka. Všimnite si, že sa nevykonáva žiadne spracovanie na určenie, či je argument celé číslo alebo nie.

Najväčší spoločný deliteľ a najmenší spoločný násobok troch alebo viacerých celých čísel

Python 3.9 alebo novší

Počnúc verziou Python 3.9 všetky nasledujúce funkcie podporujú viac ako tri argumenty.

  • 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

*Ak chcete vypočítať najväčší spoločný deliteľ alebo najmenší spoločný násobok prvkov zoznamu, zadajte tento argument.

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

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

Python 3.8 alebo starší

Pred verziou 3.8 podporovala funkcia gcd() iba dva argumenty.

Na nájdenie najväčšieho spoločného deliteľa alebo najmenšieho spoločného násobku troch alebo viacerých celých čísel nie je potrebný nijako zvlášť zložitý algoritmus; stačí postupne vypočítať najväčší spoločný deliteľ alebo najmenší spoločný násobok pre každú z hodnôt násobku pomocou funkcie vyššieho rádu 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

Opäť upozorňujeme, že pred verziou Python 3.4 sa funkcia gcd() nachádzala v module fraction, nie v module math.

najmenší spoločný menovateľ

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