Rust 在给定一系列数字的情况下实现一个简单的素数集合
我知道可能有一个主要的标准内置函数,但我这里的重点是学习rust lang 此函数的目标是在给定一系列数字的情况下,获得素数的集合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
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()
在这里不会产生一个元素;相反,它是
要通过迭代器的内容来扩展aVec
,我们使用其:
请注意,collect
现在缺失
也就是说,
extend
和push
都需要一个mut-Vec
,因此确保primes
可变。还要记住,您当前的代码会产生错误的结果,因为它会将所有数字相加;然而,这不是一个生锈问题,而是一个算法问题。push
只能将单个元素推到向量上,例如
primes.push(2);
但是,collect()
在这里不会产生一个元素;相反,它是
要通过迭代器的内容来扩展aVec
,我们使用其:
请注意,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对于快速回复