lib.rs
use std::convert::TryInto;
pub fn sum_of_multiples(limit: u32, factors: &[u32]) -> u32 {
let (mut done, mut out) = (Vec::with_capacity(factors.len()), 0);
factors
.iter()
.filter(|&&factor| factor != 0)
.for_each(|&factor| {
out += (factor..limit)
.step_by(factor.try_into().unwrap())
.filter(|&multiple| !done.iter().any(|&done_factor| multiple % done_factor == 0))
.sum::<u32>();
done.push(factor);
});
out
}