为什么在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?)来实现这个速度!