Skip to content

Commit c49eda6

Browse files
authored
call closure instead of returning vec (#75)
Co-authored-by: Luke Videckis <lukevideckis@gmail.com>
1 parent 8d631c5 commit c49eda6

File tree

2 files changed

+8
-9
lines changed

2 files changed

+8
-9
lines changed

examples/numbers/primes_factorize.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ fn main() {
1919
let mut exps = vec![0; 1001];
2020
let mut prev_factor = 0;
2121

22-
for factor in primes.factorize(x) {
22+
primes.factorize(x, |factor| {
2323
assert!(prev_factor <= factor);
2424
exps[factor] += 1;
2525
lcm_exps[factor] = lcm_exps[factor].max(exps[factor]);
2626
prev_factor = factor;
27-
}
27+
});
2828
}
2929

3030
let mut lcm = 1;

src/numbers/primes.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
/// let primes = Primes::new(100);
88
/// assert_eq!(primes.is_prime(2), true);
99
/// assert_eq!(primes.is_prime(4), false);
10-
/// assert_eq!(primes.factorize(12), vec![2, 2, 3]);
10+
/// let mut factors = vec![];
11+
/// primes.factorize(12, |factor| factors.push(factor));
12+
/// assert_eq!(factors, vec![2, 2, 3]);
1113
/// ```
1214
pub struct Primes {
1315
min_fact: Vec<usize>,
@@ -44,19 +46,16 @@ impl Primes {
4446
x >= 2 && self.min_fact[x] == x
4547
}
4648

47-
/// Returns a vector of prime factors of the given number
48-
/// The factors are sorted in ascending order
49+
/// Calls closure on each prime factor in ascending order
4950
///
5051
/// # Complexity
5152
/// - Time: O(log x)
5253
/// - Space: O(log x)
53-
pub fn factorize(&self, mut x: usize) -> Vec<usize> {
54-
let mut facts = vec![];
54+
pub fn factorize(&self, mut x: usize, mut f: impl FnMut(usize)) {
5555
while x > 1 {
5656
let p = self.min_fact[x];
57-
facts.push(p);
57+
f(p);
5858
x /= p;
5959
}
60-
facts
6160
}
6261
}

0 commit comments

Comments
 (0)