Reiknaðu og fáðu stærsta sameiginlega deilinn og minnsta sameiginlega margfeldið í Python

Viðskipti

Eftirfarandi er lýsing á því hvernig á að reikna út og fá stærsta sameiginlega deilinn og minnsta sameiginlega margfeldið í Python.

  • Stærsti sameiginlegi deilirinn og minnsta sameiginlega margfeldið af tveimur heiltölum
  • Stærsti sameiginlegi deilirinn og minnsta sameiginlega margfeldið af þremur eða fleiri heiltölum

Athugaðu að forskriftir aðgerða í venjulegu bókasafni eru mismunandi eftir Python útgáfunni. Dæmi um útfærslu á falli sem er ekki í venjulegu bókasafni er einnig sýnd í þessari grein.

  • Python 3.4 eða eldri
    • GCD:fractions.gcd()(aðeins tvö rök)
  • Python 3.5 eða nýrri
    • GCD:math.gcd()(aðeins tvö rök)
  • Python 3.9 eða nýrri
    • GCD:math.gcd()(styður fleiri en þrjú rök)
    • minnsti samnefnari:math.lcm()(styður fleiri en þrjú rök)

Hér útskýrum við aðferðina með því að nota staðlaða Python bókasafnið; Auðvelt er að nota NumPy til að reikna út stærsta sameiginlega deilinn og minnsta sameiginlega margfeldið fyrir hvern þátt í mörgum fylkjum.

Stærsti sameiginlegi deilirinn og minnsta sameiginlega margfeldið af tveimur heiltölum

GCD

Síðan Python 3.5 er gcd() fall í stærðfræðieiningunni. gcd() er skammstöfun fyrir

  • greatest common divisor

Skilar stærsta sameiginlega deili heiltölunnar sem tilgreind er í rökseminni.

import math

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

Athugaðu að í Python 3.4 og eldri er gcd() fallið í brotaeiningunni, ekki stærðfræðieiningunni. brot verða að vera flutt inn og fractions.gcd().

minnsti samnefnari

lcm() fallinu, sem skilar minnstu sameiginlegu margfeldi, var bætt við stærðfræðieininguna í Python 3.9. lcm er skammstöfun fyrir

  • least common multiple

Skilar minnsta sameiginlega margfeldi heiltölunnar sem tilgreind er í rökseminni.

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

Fyrir Python 3.8 er lcm() ekki veitt, en auðvelt er að reikna það út með gcd().

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

Dæmi um framkvæmd.

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

print(my_lcm(6, 4))
# 12

/Þar sem þetta leiðir til tugaflots, eru tveir afturskáir notaðir til að stytta tugabrot og skila heiltöludeilingarniðurstöðu. Athugaðu að engin vinnsla er gerð til að ákvarða hvort röksemdin sé heiltala eða ekki.

Stærsti sameiginlegi deilirinn og minnsta sameiginlega margfeldið af þremur eða fleiri heiltölum

Python 3.9 eða nýrri

Frá og með Python 3.9 styðja allar eftirfarandi aðgerðir fleiri en þrjú rök.

  • 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

*Ef þú vilt reikna út stærsta sameiginlega deilinn eða minnsta sameiginlega margfeldið af þáttum lista, tilgreindu rökin með þessu.

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

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

Python 3.8 eða eldri

Fyrir Python 3.8 studdi gcd() fallið aðeins tvær röksemdir.

Til að finna stærsta sameiginlega deilann eða minnsta sameiginlega margfeldið af þremur eða fleiri heiltölum þarf ekkert sérstaklega flókið reiknirit; reiknaðu bara stærsta sameiginlega deilinn eða minnstu sameiginlega margfeldið fyrir hvert af mörgum gildum aftur með því að nota hærri röð fallið 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

Athugaðu aftur að fyrir Python 3.4 er gcd() fallið í brotareiningunni, ekki stærðfræðieiningunni.

minnsti samnefnari

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