Какая часть моего кода для фильтрации простых чисел приводит к замедлению процесса? - PullRequest
0 голосов
/ 23 декабря 2018

У меня проблемы с 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.Я осознаю, что бездействие может замедлить ситуацию еще больше.

1 Ответ

0 голосов
/ 23 декабря 2018

Функция, которая замедляет выполнение:

is_prime(i: i32) 

Вы можете рассмотреть возможность использования более эффективного ящика, например простых чисел , или вы можете проверить эффективные алгоритмы проверки простых чисел здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...