tnt-lib 0.1.4

A Rust implementation of many certificates about Integers
use super::PrimesLessThan;

pub struct Sieve {
}

impl PrimesLessThan for Sieve {
    type Int = usize;
    fn get_primes(n : Self::Int) -> Vec<Self::Int>{
        let mut is_prime = vec![true;n];
        let mut primes = Vec::with_capacity(n/(64 - n.leading_zeros() as usize));
        is_prime[0] = false;
        is_prime[1] = false;
        primes.push(2);
        let mut i = 3;
        while i * i <= n {
            if is_prime[i]{
                primes.push(i);
                let mut j = i * i;
                while j <= n {
                    is_prime[i] = false;
                    j += i;
                }
                i += 2;
            }
        }
        while i < n {
            if is_prime[i]{
                primes.push(i);
            }
            i += 2;
        }
        primes
    }
}