-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfactorial_tail.rs
More file actions
35 lines (30 loc) · 891 Bytes
/
factorial_tail.rs
File metadata and controls
35 lines (30 loc) · 891 Bytes
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
use std::collections::HashMap;
pub fn zeroes(base: i32, number: i32) -> i32 {
let mut prime_factors = HashMap::new();
let mut pm_base = base;
for divisor in 2..=base {
while pm_base % divisor == 0 {
if let Some(count) = prime_factors.get_mut(&divisor) {
*count += 1;
} else {
prime_factors.insert(divisor, 1);
}
pm_base /= divisor;
}
}
let mut counts = HashMap::new();
prime_factors.keys().for_each(|&key| {
counts.insert(
key,
(1..((number as f64).log(key as f64) + 1.0) as i32)
.map(|i| number / key.pow(i as u32))
.sum::<i32>(),
);
});
let zeros_count = prime_factors
.keys()
.map(|k| counts[k] / prime_factors[k])
.min()
.unwrap();
zeros_count
}