1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
use crategcd_many;
/// Finds the LCM (Least Common Multiple) for an array of elements.
/// # Examples
/// ```
/// use ads_rs::prelude::v1::math::lcm_many;
///
/// let res0 = lcm_many(&[42, 8, 144]);
/// let res1 = lcm_many(&[89, 144, 233, 377, 610]);
/// let res2 = lcm_many(&[25, 105, 235, 100]);
///
/// assert_eq!(24192, res0);
/// assert_eq!(686719856160, res1);
/// assert_eq!(12337500, res2);
/// ```
/// ## Corner cases
/// - LCM of an empty array equals 0.
/// - LCM of a single element array equals that element.
/// ```
/// use ads_rs::prelude::v1::math::lcm_many;
///
/// let res0 = lcm_many(&[]);
/// let res1 = lcm_many(&[25]);
///
/// assert_eq!(0, res0);
/// assert_eq!(25, res1);
/// ```
/// # Implementation details
/// - Stein's algorithm is used to find GCD (from [`gcd_many`]).
/// - Time complexity: O(K * N<sup>2</sup>) where:
/// - N - bits count in the biggest number.
/// - K - number's count
/// Finds an LCM (Least Common Multiple) for a pair of numbers.
/// # Examples
/// ```
/// use ads_rs::prelude::v1::math::lcm;
///
/// let res0 = lcm(42, 144);
/// let res1 = lcm(377, 610);
/// let res2 = lcm(105, 25);
///
/// assert_eq!(1008, res0);
/// assert_eq!(229970, res1);
/// assert_eq!(525, res2);
/// ```
/// ## Corner case
/// LCM of both zero numbers equals 0.
/// ```
/// use ads_rs::prelude::v1::math::lcm;
///
/// let res = lcm(0, 0);
///
/// assert_eq!(0, res);
/// ```
/// # Implementation details
/// - Stein's algorithm used (from [`gcd_many`]).
/// - Time complexity: O(N<sup>2</sup>) where N - number of bits in the biggest number.