Skip to content

Commit 313a0e5

Browse files
pedrodesuPedro Ferreira
andauthored
CON-3623 Correct and improve previousprime (#171)
* fix(previousprime): improve solution and subject * feat(rust): bump rust to 1.89 --------- Co-authored-by: Pedro Ferreira <pedro.ferreira@01talent.com>
1 parent a38b2f9 commit 313a0e5

File tree

6 files changed

+41
-50
lines changed

6 files changed

+41
-50
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
### Test Image specific config
22

3-
FROM rust:1.86-slim-bookworm
3+
FROM rust:1.89-slim-bookworm
44

55
RUN apt-get update
66
RUN apt-get -y install pkg-config libssl-dev moreutils

solutions/previousprime/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "previousprime"
33
version = "0.1.0"
44
authors = ["OGordoo <marcosafonso8@hotmail.com>"]
5-
edition = "2021"
5+
edition = "2024"
66

77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

solutions/previousprime/src/lib.rs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
1-
pub fn prev_prime(nbr: u64) -> u64 {
2-
if nbr <= 2 {
3-
return 0;
4-
}
5-
6-
let mut min_number = 2;
1+
use std::iter;
72

8-
for i in 2..nbr {
9-
if is_prime(i) {
10-
min_number = i;
11-
}
3+
#[inline]
4+
pub fn prev_prime(nbr: usize) -> usize {
5+
if nbr > 2 {
6+
iter::once(2)
7+
.chain((3..nbr).step_by(2))
8+
.rfind(|&n| is_prime(n))
9+
.unwrap_or_default()
10+
} else {
11+
Default::default()
1212
}
13-
14-
min_number
1513
}
1614

17-
fn is_prime(nbr: u64) -> bool {
18-
if nbr > 0 {
19-
if nbr <= 1 {
20-
return false;
21-
}
22-
let mut d = 2;
23-
while d * d <= nbr {
24-
if nbr % d == 0 {
25-
return false;
26-
}
27-
d += 1;
28-
}
15+
fn is_prime(n: usize) -> bool {
16+
if n < 2 {
17+
return false;
18+
}
19+
if n <= 3 {
2920
return true;
30-
} else {
21+
}
22+
if n.is_multiple_of(2) || n.is_multiple_of(3) {
3123
return false;
3224
}
25+
let mut d = 5;
26+
while d * d <= n {
27+
if n.is_multiple_of(d) || n.is_multiple_of(d + 2) {
28+
return false;
29+
}
30+
d += 6;
31+
}
32+
true
3333
}

tests/previousprime_test/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
name = "previousprime_test"
33
version = "0.1.0"
44
authors = ["OGordoo <marcosafonso8@hotmail.com>"]
5-
edition = "2021"
5+
edition = "2024"
66

77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

99
[dependencies]
10-
previousprime = {path = "../../solutions/previousprime"}
10+
previousprime = {path = "../../solutions/previousprime"}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use previousprime::*;
2+
3+
#[test]
4+
fn prev_prime_test() {
5+
assert_eq!(0, prev_prime(0));
6+
assert_eq!(0, prev_prime(2));
7+
assert_eq!(2, prev_prime(3));
8+
assert_eq!(3, prev_prime(5));
9+
assert_eq!(31, prev_prime(34));
10+
assert_eq!(631, prev_prime(633));
11+
assert_eq!(478139, prev_prime(478152));
12+
}

tests/previousprime_test/src/main.rs

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)