Skip to main content

ac_lib/math/
prime.rs

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}