1fn get_upper_range_n(n: u32) -> u32 {
6 (n as f32).sqrt() as u32 + 1
7}
8
9pub fn has_prime_number_below(n: u32) -> bool {
19 n > 2
20}
21
22pub fn is_prime_number(n: u32) -> bool {
32 match n {
33 0..=1 => false,
34 _ => !(2..get_upper_range_n(n)).any(|i| n % i == 0),
35 }
36}
37
38pub fn get_prime_number_count_below(n: u32) -> usize {
48 match n {
49 0..=2 => 0,
50 _ => (2..n).filter(|i| is_prime_number(*i)).count(),
51 }
52}
53
54pub fn get_largest_prime_number_below(n: u32) -> u32 {
64 match (2..n).rev().find(|i| is_prime_number(*i)) {
65 Some(i) => i,
66 None => 0,
67 }
68}
69
70pub fn get_prime_numbers_below(n: u32) -> Vec<u32> {
80 let upper_range_n: u32 = get_upper_range_n(n);
81 let mut sieve: Vec<u32> = vec![0, 0];
82 sieve.append(&mut (2..n).collect());
83
84 for (i, _) in (0..upper_range_n).enumerate() {
85 if sieve[i] <= 0 {
86 continue;
87 }
88
89 let mut next_index = i * i;
90
91 while next_index < sieve.len() {
92 sieve[next_index] = 0;
93 next_index += i;
94 }
95 }
96
97 sieve.into_iter().filter(|&element| element > 0).collect()
98}
99
100#[cfg(test)]
101mod tests {
102 use super::*;
103
104 #[test]
105 fn has_prime() {
106 assert_eq!(has_prime_number_below(0), false);
107 assert_eq!(has_prime_number_below(1), false);
108 assert_eq!(has_prime_number_below(2), false);
109 assert_eq!(has_prime_number_below(3), true);
110 assert_eq!(has_prime_number_below(4), true);
111 assert_eq!(has_prime_number_below(5), true);
112 }
113
114 #[test]
115 fn is_prime() {
116 assert_eq!(is_prime_number(0), false);
117 assert_eq!(is_prime_number(1), false);
118 assert_eq!(is_prime_number(2), true);
119 assert_eq!(is_prime_number(3), true);
120 assert_eq!(is_prime_number(4), false);
121 assert_eq!(is_prime_number(5), true);
122 assert_eq!(is_prime_number(6), false);
123 assert_eq!(is_prime_number(7), true);
124 assert_eq!(is_prime_number(8), false);
125 assert_eq!(is_prime_number(9), false);
126 assert_eq!(is_prime_number(10), false);
127 assert_eq!(is_prime_number(11), true);
128 assert_eq!(is_prime_number(12), false);
129 }
130
131 #[test]
132 fn prime_count_below() {
133 assert_eq!(get_prime_number_count_below(0), 0);
134 assert_eq!(get_prime_number_count_below(1), 0);
135 assert_eq!(get_prime_number_count_below(2), 0);
136 assert_eq!(get_prime_number_count_below(3), 1);
137 assert_eq!(get_prime_number_count_below(4), 2);
138 assert_eq!(get_prime_number_count_below(5), 2);
139 assert_eq!(get_prime_number_count_below(6), 3);
140 assert_eq!(get_prime_number_count_below(7), 3);
141 assert_eq!(get_prime_number_count_below(8), 4);
142 assert_eq!(get_prime_number_count_below(9), 4);
143 assert_eq!(get_prime_number_count_below(10), 4);
144 assert_eq!(get_prime_number_count_below(11), 4);
145 assert_eq!(get_prime_number_count_below(12), 5);
146 assert_eq!(get_prime_numbers_below(12).len(), 5);
147 }
148
149 #[test]
150 fn largest_prime_below() {
151 assert_eq!(get_largest_prime_number_below(0), 0);
152 assert_eq!(get_largest_prime_number_below(1), 0);
153 assert_eq!(get_largest_prime_number_below(2), 0);
154 assert_eq!(get_largest_prime_number_below(3), 2);
155 assert_eq!(get_largest_prime_number_below(4), 3);
156 assert_eq!(get_largest_prime_number_below(5), 3);
157 assert_eq!(get_largest_prime_number_below(6), 5);
158 assert_eq!(get_largest_prime_number_below(7), 5);
159 assert_eq!(get_largest_prime_number_below(8), 7);
160 assert_eq!(get_largest_prime_number_below(9), 7);
161 assert_eq!(get_largest_prime_number_below(10), 7);
162 assert_eq!(get_largest_prime_number_below(11), 7);
163 assert_eq!(get_largest_prime_number_below(12), 11);
164
165 assert_eq!(get_prime_numbers_below(12).contains(&11), true);
166 }
167
168 #[test]
169 fn primes_below() {
170 assert_eq!(get_prime_numbers_below(0), vec![]);
171 assert_eq!(get_prime_numbers_below(1), vec![]);
172 assert_eq!(get_prime_numbers_below(2), vec![]);
173 assert_eq!(get_prime_numbers_below(3), vec![2]);
174 assert_eq!(get_prime_numbers_below(4), vec![2, 3]);
175 assert_eq!(get_prime_numbers_below(5), vec![2, 3]);
176 assert_eq!(get_prime_numbers_below(6), vec![2, 3, 5]);
177 assert_eq!(get_prime_numbers_below(7), vec![2, 3, 5]);
178 assert_eq!(get_prime_numbers_below(8), vec![2, 3, 5, 7]);
179 assert_eq!(get_prime_numbers_below(9), vec![2, 3, 5, 7]);
180 assert_eq!(get_prime_numbers_below(10), vec![2, 3, 5, 7]);
181 assert_eq!(get_prime_numbers_below(11), vec![2, 3, 5, 7]);
182 assert_eq!(get_prime_numbers_below(12), vec![2, 3, 5, 7, 11]);
183 }
184}