dsalgo 0.3.10

A package for Datastructures and Algorithms.
Documentation
use crate::is_prime_table_from_enumerate_primes::is_prime;

/// table[i] := largest prime number less or equal to i.

pub fn previous_prime_table(size: usize) -> Vec<Option<u64>> {
    let mut prev = is_prime(size)
        .into_iter()
        .enumerate()
        .map(|(i, is_prime)| if is_prime { Some(i as u64) } else { None })
        .collect::<Vec<_>>();

    for i in 4..size {
        if prev[i].is_none() {
            prev[i] = prev[i - 1];
        }
    }

    prev
}

#[cfg(test)]

mod tests {

    use super::*;

    #[test]

    fn test() {
        let prev = previous_prime_table(20);

        assert_eq!(
            prev.into_iter().take(10).collect::<Vec<_>>(),
            vec![
                None,
                None,
                Some(2),
                Some(3),
                Some(3),
                Some(5),
                Some(5),
                Some(7),
                Some(7),
                Some(7),
            ],
        );
    }
}