Rust 在给定一系列数字的情况下实现一个简单的素数集合

Rust 在给定一系列数字的情况下实现一个简单的素数集合,rust,Rust,我知道可能有一个主要的标准内置函数,但我这里的重点是学习rust lang 此函数的目标是在给定一系列数字的情况下,获得素数的集合 fn main() -> () { let n = 1..20; let primes: Vec<u32> = Vec::new(); for val in n { primes.push( (1..20).filter(|x| x / val == 1 && x % val == 0).co

我知道可能有一个主要的标准内置函数,但我这里的重点是学习rust lang

此函数的目标是在给定一系列数字的情况下,获得素数的集合

fn main() -> () {
    let n = 1..20;
    let primes: Vec<u32> = Vec::new();
    for val in n {
        primes.push( (1..20).filter(|x| x / val == 1 && x % val == 0).collect() );
        println!("we got: {}", primes[val-1]);
    }
// expecting primes to be [2, 3, 5, 7, 11, 13, 17]
}
fn main()->(){
设n=1..20;
让素数为:Vec=Vec::new();
对于n中的val{
primes.push((1..20).filter(|x | x/val==1&&x%val==0.collect());
println!(“我们得到:{}”,素数[val-1]);
}
//期望素数为[2,3,5,7,11,13,17]
}
编译器抱怨

error[E0308]: mismatched types
 --> src/main.rs:5:22
  |
5 |         primes.push( (1..20).filter(|x| x / val == 1 && x % val == 0) );
  |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected u32, found struct `std::iter::Filter`
  |
  = note: expected type `u32`
             found type `std::iter::Filter<std::ops::Range<{integer}>, [closure@src/main.rs:5:37: 5:69 val:_]>`

error: aborting due to previous error

For more information about this error, try `rustc --explain E0308`.
错误[E0308]:类型不匹配
-->src/main.rs:5:22
|
5 | primes.push((1..20).filter(|x | x/val==1&&x%val==0));
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^应为u32,已找到结构“std::iter::Filter”`
|
=注意:应为'u32'类型`
找到类型“std::iter::Filter”`
错误:由于上一个错误而中止
有关此错误的详细信息,请尝试“rustc--explain E0308”。

我做错了什么?我很难处理所有的所有权、引用和生命周期问题,因为推送只能将单个元素推送到向量上,例如

primes.push(2);
但是,
collect()
在这里不会产生一个元素;相反,它是

要通过迭代器的内容来扩展a
Vec
,我们使用其:

请注意,
collect
现在缺失


也就是说,
extend
push
都需要一个
mut-Vec
,因此确保
primes
可变。还要记住,您当前的代码会产生错误的结果,因为它会将所有数字相加;然而,这不是一个生锈问题,而是一个算法问题。

push
只能将单个元素推到向量上,例如

primes.push(2);
但是,
collect()
在这里不会产生一个元素;相反,它是

要通过迭代器的内容来扩展a
Vec
,我们使用其:

请注意,
collect
现在缺失


也就是说,
extend
push
都需要一个
mut-Vec
,因此确保
primes
可变。还要记住,您当前的代码会产生错误的结果,因为它会将所有数字相加;然而,这不是一个生锈问题,而是一个算法问题。

不清楚您到底想做什么。为什么在
1..20
上有一个循环,然后在
1..20
上进行过滤?过滤器的用途是什么?过滤器逻辑的目的是什么?你能描述一下for loopfilter每次迭代的目的是什么吗?filter的目的是过滤掉非素数并收集素数向量中的素数。因此,在每次迭代中,你希望将
1..20
中的所有素数添加到
素数中。这不会给你一个
Vec
Vec
s吗?不清楚你到底想做什么。为什么在
1..20
上有一个循环,然后在
1..20
上进行过滤?过滤器的用途是什么?过滤器逻辑的目的是什么?你能描述一下for loopfilter每次迭代的目的是什么吗?filter的目的是过滤掉非素数并收集素数向量中的素数。因此,在每次迭代中,你希望将
1..20
中的所有素数添加到
素数中。这不会给你一个
Vec
Vec
s吗?是的,算法是完全错误的,只是实验,thx对于快速回复算法是完全错误的,只是实验,thx对于快速回复