Built-in module to calculate the least common multiple
Question:
I am currently using a function that accepts two numbers and uses a loop to find the least common multiple of those numbers,
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 there a built-in module in Python that does it instead of writing a custom function?
Answers:
Try this instead:
def lcm(x, y):
from fractions import gcd # or can import gcd from `math` in Python 3
return x * y // gcd(x, y)
In Python 3.8 and earlier
There is no such thing built into the stdlib.
However, there is a Greatest Common Divisor function in the math
library. (For Python 3.4 or 2.7, it’s buried in fractions
instead.) And writing an LCM on top of a GCD is pretty trivial:
def lcm(a, b):
return abs(a*b) // math.gcd(a, b)
Or, if you’re using NumPy, it’s come with an lcm
function for quite some time now.
To simplify your code a little:
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)
In Python 3.9+
This is available as math.lcm()
. It also takes any number of arguments, allowing you to find the lowest common multiple of more than 2 integers.
For example:
>>> from math import lcm
>>> lcm(2, 5, 7)
70
This is not only for two numbers specifically but for finding LCM of an array of integers. (without using math.lcm())
import math
from functools import reduce
def lcm(arr):
l=reduce(lambda x,y:(x*y)//math.gcd(x,y),arr)
return l
I am currently using a function that accepts two numbers and uses a loop to find the least common multiple of those numbers,
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 there a built-in module in Python that does it instead of writing a custom function?
Try this instead:
def lcm(x, y):
from fractions import gcd # or can import gcd from `math` in Python 3
return x * y // gcd(x, y)
In Python 3.8 and earlier
There is no such thing built into the stdlib.
However, there is a Greatest Common Divisor function in the math
library. (For Python 3.4 or 2.7, it’s buried in fractions
instead.) And writing an LCM on top of a GCD is pretty trivial:
def lcm(a, b):
return abs(a*b) // math.gcd(a, b)
Or, if you’re using NumPy, it’s come with an lcm
function for quite some time now.
To simplify your code a little:
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)
In Python 3.9+
This is available as math.lcm()
. It also takes any number of arguments, allowing you to find the lowest common multiple of more than 2 integers.
For example:
>>> from math import lcm
>>> lcm(2, 5, 7)
70
This is not only for two numbers specifically but for finding LCM of an array of integers. (without using math.lcm())
import math
from functools import reduce
def lcm(arr):
l=reduce(lambda x,y:(x*y)//math.gcd(x,y),arr)
return l