prim/
lib.rs

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)); //true (-> u64 numbers)
13        //println!("{}", check_big_prime(49999999999999998491)); //true (-> u128 numbers)
14        println!("{:?}", check_area(1, 10)); //[2, 3, 5, 7]
15        println!("{:?}", sieve_of_eratosthenes(10)); //[2, 3, 5, 7]
16
17        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}