1#[inline(never)]
2fn is_prime_number(v: usize, prime_numbers: &[usize]) -> bool {
3 if v < 10000 {
4 let r = prime_numbers.binary_search(&v);
5 return r.is_ok();
6 }
7
8 for n in prime_numbers {
9 if v % n == 0 {
10 return false;
11 }
12 }
13
14 true
15}
16
17#[inline(never)]
18fn prepare_prime_numbers() -> Vec<usize> {
19 let mut prime_number_table: [bool; 10000] = [true; 10000];
21 prime_number_table[0] = false;
22 prime_number_table[1] = false;
23 for i in 2..10000 {
24 if prime_number_table[i] {
25 let mut v = i * 2;
26 while v < 10000 {
27 prime_number_table[v] = false;
28 v += i;
29 }
30 }
31 }
32 let mut prime_numbers = vec![];
33 for i in 2..10000 {
34 if prime_number_table[i] {
35 prime_numbers.push(i);
36 }
37 }
38 prime_numbers
39}
40
41fn main() {
42 let prime_numbers = prepare_prime_numbers();
43
44 gperftools_static::PROFILER
45 .lock()
46 .unwrap()
47 .start("/tmp/prime.target")
48 .unwrap();
49
50 let mut v = 0;
51 for i in 2..50000 {
52 if is_prime_number(i, &prime_numbers) {
53 v += 1;
54 }
55 }
56
57 gperftools_static::PROFILER.lock().unwrap().stop().unwrap();
58
59 println!("Prime numbers: {}", v);
60}