Ingebouwde module om het kleinste gemene veelvoud te berekenen

Ik gebruik momenteel een functie die twee getallen accepteert en een lus gebruikt om het kleinste gemene veelvoud van die getallen te vinden,

def lcm(x, y):
   """This function takes two
   integers and returns the L.C.M."""
   # Choose the greater number
   if x > y:
       greater = x
   else:
       greater = y
   while(True):
       if((greater % x == 0) and (greater % y == 0)):
           lcm = greater
           break
       greater += 1
   return lcm

Is er een ingebouwde module in Python die dit doet in plaats van een aangepaste functie te schrijven?


Antwoord 1, autoriteit 100%

In Python 3.8 en eerder

Zoiets is niet ingebouwd in de stdlib.

Er is echter een Grootste Gemeenschappelijke Deler-functie in de mathbibliotheek. (Voor Python 3.4 of 2.7 is het in plaats daarvan begraven in fractions.) En het schrijven van een LCM bovenop een GCD is vrij triviaal:

def lcm(a, b):
    return abs(a*b) // math.gcd(a, b)

Of, als je NumPy gebruikt, wordt het geleverd met een lcmwerkt al geruime tijd.


Antwoord 2, autoriteit 60%

In Python 3.9+

Dit is beschikbaar als math.lcm(). Er zijn ook argumenten van elke lengte nodig, zodat u het laagste gemene veelvoud van meer dan 2 gehele getallen kunt vinden.


Antwoord 3, autoriteit 18%

Probeer dit in plaats daarvan:

def lcm(x, y):
    from fractions import gcd # or can import gcd from `math` in Python 3
    return x * y // gcd(x, y)

Antwoord 4

Om uw code een beetje te vereenvoudigen:

def lcm(x, y):
    for currentPossibleLCM in range(max(x,y), (x*y)+1)
         if((currentPossibleLCM % x == 0) and (currentPossibleLCM % y == 0)):
              return currentPossibleLCM

Runtime: O (x * y)

Other episodes