1use integer_sqrt::IntegerSquareRoot;
2
3#[cfg(test)]
4mod tests {
5 use crate::{check_prime, check_area, check_big_prime, sieve_of_eratosthenes};
6 use std::time;
7
8 #[test]
9 fn it_works() {
10 let start = time::Instant::now();
11
12 println!("{}", check_prime(5)); println!("{:?}", check_area(1, 10)); println!("{:?}", sieve_of_eratosthenes(10)); println!("duration: {:?}", time::Instant::now().duration_since(start));
18 }
19}
20
21pub fn check_prime(number:u64) -> bool {
22 if number <= 1 { return false }
23 for divisor in 2..number.integer_sqrt()+1 {
24 if &number%divisor == 0 { return false }
25 }
26 true
27}
28
29fn check_big_prime(number:u128) -> bool {
30 todo!("Miller-Rabin-Test")
31}
32
33pub fn check_area(start:u64, end:u64) -> Vec<u64> {
34 let mut primes:Vec<u64> = Vec::new();
35 let mut divisor:u64;
36 if start < 1 && start >= end { return primes }
37 for number in start..end {
38 divisor = 2;
39 while (number%divisor != 0) && (divisor <= number.integer_sqrt()) { divisor = divisor + 1; }
40 if (divisor >= number.integer_sqrt()+1) && (number != 1) { primes.push(number); }
41 }
42 primes
43}
44
45pub fn sieve_of_eratosthenes(limit:u32) -> Vec<u32> {
46 let limit = limit as usize;
47 let mut numbers:Vec<u32> = vec![0; limit];
48 for i in 0..limit {
49 numbers[i] = i as u32;
50 }
51 let mut number:usize;
52 for divisor in 2..(limit.integer_sqrt()+1) {
53 if numbers[divisor] != 0 {
54 number = divisor*divisor;
55 while number < limit {
56 numbers[number] = 0;
57 number += divisor;
58 }
59 }
60 }
61 let mut primes= vec![];
62 for number in numbers {
63 if number != 0 && number != 1 {
64 primes.push(number);
65 }
66 }
67 primes
68}