pub fn primes_up_to(upper_bound: u64) -> Vec { let mut sieve: Vec> = (2..=upper_bound).map(Some).collect(); primes(&mut sieve); sieve.iter().filter_map(|x| *x).collect() } fn primes(ps: &mut [Option]) { if let Some(&n) = ps.first() { if let Some(p) = n { (p as usize..ps.len()) .step_by(p as usize) .for_each(|x| ps[x] = None) } primes(&mut ps[1..]); } }