algorithms_edu/algo/math/
lcm.rs1use super::gcd::*;
2
3pub trait Lcm: Gcd {
4 fn lcm(self, other: Self) -> Self {
5 (self / self.gcd(other) * other).abs()
6 }
7}
8
9pub trait LcmUnsigned: GcdUnsigned {
10 fn lcm(self, other: Self) -> Self {
11 (self / self.gcd(other)) * other
12 }
13}
14
15impl<I: Gcd> Lcm for I {}
16
17impl<I: GcdUnsigned> LcmUnsigned for I {}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22 #[test]
23 fn test_lcm() {
24 assert_eq!(12i32.lcm(18), 36);
25 assert_eq!((-12i32).lcm(18), 36);
26 assert_eq!((12i32).lcm(-18), 36);
27 assert_eq!((-12i32).lcm(-18), 36);
28 }
29}