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 math
bibliotheek. (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 lcm
werkt 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)