У меня проблемы с Project Euler .Эта задача требует фильтрации простых чисел из массива.Я был на полпути к своему решению, когда узнал, что Rust был немного медленным.Я добавил индикатор выполнения для проверки хода выполнения.
Вот код: extern crate pbr;
use self::pbr::ProgressBar;
pub fn is_prime(i: i32) -> bool {
for d in 2..i {
if i % d == 0 {
return false;
}
}
true
}
pub fn calc_sum_loop(max_num: i32) -> i32 {
let mut pb = ProgressBar::new(max_num as u64);
pb.format("[=>_]");
let mut sum_primes = 0;
for i in 1..max_num {
if is_prime(i) {
sum_primes += i;
}
pb.inc();
}
sum_primes
}
pub fn solve() {
println!("About to calculate sum of primes in the first 20000");
println!("When using a forloop {:?}", calc_sum_loop(400000));
}
Я вызываю функцию solve
из моего main.rs
файл.Оказывается, что число итераций в цикле for у меня намного быстрее в начале и намного позже.
➜ euler-rust git:(master) ✗ cargo run --release
Finished release [optimized] target(s) in 0.05s
Running `target/release/euler-rust`
About to calculate sum of primes..
118661 / 400000 [===========>__________________________] 29.67 % 48780.25/s 6s
...
...
400000 / 400000 [=======================================] 100.00 % 23725.24/s
Я как бы рисую пробел в том, что может быть причиной этого замедления.Такое ощущение, что Rust должен быть намного быстрее, чем то, что я сейчас вижу.Обратите внимание, что я говорю Cargo для сборки с флагом --release
.Я осознаю, что бездействие может замедлить ситуацию еще больше.