如何在我的Eratosthenes筛子中加速Vec <bool>?</bool>

时间:2015-01-01 22:34:32

标签: optimization vector rust

为什么在Rust中直接实施筛子的速度如此之慢以及如何加快速度?

use std::num::Float;
use std::iter::range_step;

fn eratosthenes(n: uint) -> Vec<bool> {
    let mut sieve = Vec::from_elem(n+1,true);

    sieve[0] = false;
    sieve[1] = false;

    let m = ((n as f64).sqrt()) as uint;

    for i in range(0u, m+1) {
        if sieve[i] {
            for j in range_step(i*i, n+1, i) {
                sieve[j] = false;
            }
        }
    }
    sieve
}

fn main() {
    eratosthenes(100_000_000);
    /*    
    let mut found = Vec::new();
    for (i,&sieve) in sieve.iter().enumerate() {
        if sieve {
            found.push(i);
        }
    }
    println!("Primes found: {}",found.len());
    */
}

P.S。:我不是在问一个更好的算法,而是如何恰当地使用Vec(Slice?)来实现这个速度!

0 个答案:

没有答案