1pub fn is_prime(n: u64) -> bool {
2 if n < 2 {
3 return false;
4 }
5 if n == 2 {
6 return true;
7 }
8 if n.is_multiple_of(2) {
9 return false;
10 }
11
12 let mut i = 3;
13 while i * i <= n {
14 if n.is_multiple_of(i) {
15 return false;
16 }
17 i += 2;
18 }
19 true
20}
21
22pub fn generate_primes(limit: u64) -> Vec<u64> {
23 (2..=limit).filter(|&n| is_prime(n)).collect()
24}
25
26pub fn nth_prime(n: usize) -> Option<u64> {
27 let mut count = 0;
28 let mut candidate = 1;
29
30 while count < n {
31 candidate += 1;
32 if is_prime(candidate) {
33 count += 1;
34 }
35 }
36 Some(candidate)
37}