diff --git a/solutions/previousprime/src/lib.rs b/solutions/previousprime/src/lib.rs index 0ced7e5f..629a3575 100644 --- a/solutions/previousprime/src/lib.rs +++ b/solutions/previousprime/src/lib.rs @@ -1,33 +1,6 @@ pub fn prev_prime(nbr: u64) -> u64 { - if nbr <= 2 { - return 0; - } - - let mut min_number = 2; - - for i in 2..nbr { - if is_prime(i) { - min_number = i; - } - } - - min_number -} - -fn is_prime(nbr: u64) -> bool { - if nbr > 0 { - if nbr <= 1 { - return false; - } - let mut d = 2; - while d * d <= nbr { - if nbr % d == 0 { - return false; - } - d += 1; - } - return true; - } else { - return false; - } + (2..nbr) + .rev() + .find(|&n| (2..).take_while(|d| d * d <= n).all(|d| n % d != 0)) + .unwrap_or(0) }