use num_integer::{sqrt, Roots};
use num_traits::Unsigned;
use std::collections::BTreeMap;
pub fn prime_factorization<T: Unsigned + Roots>(n: T) -> BTreeMap<usize, T> {
let mut map = BTreeMap::new();
(0..=n.sqrt()).for_each(|v| {});
map
}
error[E0308]: mismatched types
--> src/lib.rs:93:10
|
91 | pub fn prime_factorization<T: Unsigned + Roots>(n: T) -> BTreeMap<usize, T> {
| - this type parameter
92 | let mut map = BTreeMap::new();
93 | (0..=n.sqrt()).for_each(|v| {});
| ----^^^^^^^^
| | |
| | expected integer, found type parameter `T`
| arguments to this function are incorrect
|
= note: expected type `{integer}`
found type parameter `T`
我希望能够指定usize,u16,u32等的T。我可以直接指定这些类型,但我想知道更好的方法。我应该给T加上什么界限?
1条答案
按热度按时间zynd9foi1#
如果你想在这里使用一个范围,你需要做两件事。首先,您需要某种方法将文字0转换为您的类型,因为这不能保证适用于所有类型。第二,你需要使它成为一个迭代器。
看起来像这样: