NumPy ufunc for Finding LCM (Least Common Multiple)
Last updated 1 month, 3 weeks ago | 133 views 75 5

Finding the Least Common Multiple (LCM) is a common task in number theory, cryptography, and system design. With NumPy’s universal functions (ufuncs), you can compute LCM efficiently on arrays using element-wise operations — fast, vectorized, and memory-efficient.
This article focuses on the np.lcm
ufunc introduced in NumPy 1.17, which allows element-wise LCM computations, along with its extended ufunc methods: reduce
, accumulate
, and outer
.
What is LCM?
The Least Common Multiple (LCM) of two integers is the smallest positive integer that is divisible by both. For example:
-
LCM(4, 6) = 12
-
LCM(5, 7) = 35
Mathematically,
LCM(a,b)=∣a⋅b∣GCD(a,b)\text{LCM}(a, b) = \frac{|a \cdot b|}{\text{GCD}(a, b)}
NumPy ufunc for LCM
NumPy provides a built-in ufunc for LCM:
np.lcm(x1, x2)
⚠️ Requirements
-
Available in NumPy 1.17.0+
-
Only works with integers
Core Methods of np.lcm
Method | Purpose |
---|---|
np.lcm(x1, x2) |
Element-wise LCM |
np.lcm.reduce(arr) |
Cumulative LCM across an array |
np.lcm.accumulate(arr) |
Step-by-step cumulative LCM |
np.lcm.outer(x1, x2) |
Pairwise outer LCM for each x1–x2 pair |
Step-by-Step Examples
1. np.lcm(x1, x2)
– Element-wise LCM
✅ Example:
import numpy as np
a = np.array([4, 6])
b = np.array([6, 8])
result = np.lcm(a, b)
print(result)
Output:
[12 24]
Explanation:
-
LCM(4,6) = 12
-
LCM(6,8) = 24
2. np.lcm.reduce()
– LCM of an Entire Array
✅ Example:
arr = np.array([2, 3, 4, 5])
result = np.lcm.reduce(arr)
print(result)
Output:
60
Explanation:
-
LCM(2,3) = 6
-
LCM(6,4) = 12
-
LCM(12,5) = 60
3. np.lcm.accumulate()
– Cumulative LCM
✅ Example:
arr = np.array([2, 3, 4, 5])
result = np.lcm.accumulate(arr)
print(result)
Output:
[ 2 6 12 60]
Explanation:
-
Step 1: 2
-
Step 2: LCM(2,3) = 6
-
Step 3: LCM(6,4) = 12
-
Step 4: LCM(12,5) = 60
4. np.lcm.outer()
– Outer Pairwise LCM Table
✅ Example:
a = np.array([2, 3, 4])
b = np.array([5, 6])
result = np.lcm.outer(a, b)
print(result)
Output:
[[10 6]
[15 6]
[20 12]]
Explanation:
-
Each row in
a
is paired with each column inb
✅ Full Working Code Example
import numpy as np
# Arrays
a = np.array([2, 3, 4, 5])
b = np.array([6, 8, 10])
# Element-wise LCM
print("Element-wise LCM:")
print(np.lcm(a[:3], b[:3])) # [6, 24, 20]
# Reduce
print("\nLCM of entire array (reduce):")
print(np.lcm.reduce(a)) # 60
# Accumulate
print("\nCumulative LCM:")
print(np.lcm.accumulate(a)) # [2, 6, 12, 60]
# Outer product
print("\nOuter LCM:")
print(np.lcm.outer(a, b))
Tips and Best Practices
✅ Tips
-
Use
np.lcm.reduce()
when you need the LCM across an entire list or axis. -
Use
np.lcm.accumulate()
when tracking how the LCM evolves step-by-step. -
outer()
is great for generating LCM tables or solving multiple pairwise problems.
⚠️ Common Pitfalls
-
Only works with integers
-
Using floats will raise an error:
✅np.lcm(4, 6)
❌np.lcm(4.0, 6.0)
→TypeError
-
-
Negative numbers
-
LCM is always positive.
np.lcm(-4, 6)
→12
-
-
Zero values
-
LCM involving
0
is always0
:np.lcm(0, 6) # Output: 0
-
-
Older NumPy versions
-
np.lcm
is only available in NumPy 1.17.0+.
Check version with:import numpy as np print(np.__version__)
-
Summary Table
Function | Description | Output Shape |
---|---|---|
np.lcm(a, b) |
Element-wise LCM | Broadcasted shape |
np.lcm.reduce(arr) |
Single LCM value from all elements | Scalar |
np.lcm.accumulate() |
Step-wise cumulative LCM | Same shape |
np.lcm.outer(a, b) |
Matrix of pairwise LCMs | 2D matrix |
Real-World Use Cases
-
Scheduling problems: Aligning time intervals
-
Signal processing: Common periodicity between signals
-
Cryptography: RSA key generation (uses LCM in key math)
-
Number theory: Factorization and optimization problems
Conclusion
NumPy's np.lcm
and its ufunc extensions give you fast, efficient, and readable tools to compute least common multiples over arrays. Whether you're solving mathematical problems, optimizing systems, or analyzing patterns, mastering these ufuncs adds precision and performance to your Python toolkit.