algorithms_edu/algo/math/
lcm.rs

1use 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}