rust 算法题求优化之 寻找质数与除数

想请教一下怎么优化这个题的代码

问题的描述是:
创建一个名为 divisors / Divisors 的函数,该函数接受一个整数 n > 1 并返回一个数组,该数组具有从最小到最大的所有整数除数(1和数字本身除外)。如果数字为质数,则返回字符串’(integer) is prime’。

我的代码是:

    fn isPrime(int: u32) -> bool {
        let mut sum: u32 = 0;
        for i in 1..=int {
            if int % i == 0 {
                sum += 1;
            } else {
            }
        }
        if sum <= 2 {
            true
        } else {
            false
        }
    }

    fn divisors(integer: u32) -> Result<Vec<u32>, String> {
        if isPrime(integer) {
            let s: String = integer.to_string() + " is prime";
            return Err(s);
        } else {
            let mut vec = Vec::new();
            for i in 2..integer {
                if integer % i == 0 {
                    vec.push(i);
                } else {
                }
            }
            Ok(vec)
        }
    }

代码是可以运行成功的。

现在我想问一下如何优化这个代码?或者有一种更简单的写法?

最佳答案

你这是 c 语言写多了,突如开始写 Rust 就开始多函数了,没有掌握函数式编程之精妙,而且如果采用闭包它不香么?

我给的一个思路是这样的,你看看对不对:

fn divisors(integer: u32) -> Result<Vec<u32>, String> {
  let divisors: Vec<u32> = (2..integer / 2 + 1).filter(|x| integer % x == 0).collect();
  match !divisors.is_empty() {
    true => Ok(divisors),
    _ => Err(format!("{} is prime", integer))
  }
}

你应该能看懂吧,而且实际上遍历也可以简化的,最后再用上强大的 match ,你说如何效率不高?

3年前 评论
lve_me (楼主) 3年前
lve_me (楼主) 3年前
chen0adapter (作者) 3年前
lve_me (楼主) 3年前
chen0adapter (作者) 3年前
lve_me (楼主) 3年前
讨论数量: 1

你这是 c 语言写多了,突如开始写 Rust 就开始多函数了,没有掌握函数式编程之精妙,而且如果采用闭包它不香么?

我给的一个思路是这样的,你看看对不对:

fn divisors(integer: u32) -> Result<Vec<u32>, String> {
  let divisors: Vec<u32> = (2..integer / 2 + 1).filter(|x| integer % x == 0).collect();
  match !divisors.is_empty() {
    true => Ok(divisors),
    _ => Err(format!("{} is prime", integer))
  }
}

你应该能看懂吧,而且实际上遍历也可以简化的,最后再用上强大的 match ,你说如何效率不高?

3年前 评论
lve_me (楼主) 3年前
lve_me (楼主) 3年前
chen0adapter (作者) 3年前
lve_me (楼主) 3年前
chen0adapter (作者) 3年前
lve_me (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!