的使用以下功能:鏽使用移動值
fn factors(number: &BigInt) -> Vec<BigInt> {
let mut n = number.clone();
let mut i: BigInt = ToBigInt::to_bigint(&2).unwrap();
let mut factors = Vec::<BigInt>::new();
while i * i <= n {
if (n % i) == ToBigInt::to_bigint(&1).unwrap() {
i = i + ToBigInt::to_bigint(&1).unwrap();
}
else {
n = n/i as BigInt;
factors.push(i);
}
i = i + ToBigInt::to_bigint(&1).unwrap();
}
if n > i {
factors.push(n);
}
factors
}
我得到移動值誤差字面上每次爲i
或n
時,從開頭的行while
,也在if
。我讀過關於借款的文章,我理解得體,但這個東西我不明白。 我根本不是「複製」這個值,所以我沒有看到任何地方我可能會失去變量的所有權。
BigInt是什麼類型?它來自哪個箱子? –
ow,對不起,它來自'num'。這是一個很大的int,它沒有實現'Copy'特性,因爲這會非常非常非常耗費CPU時間。 (我知道我也在這裏複製,我無法找到更好的解決方案) – Epse
啊不需要道歉,只是想知道他們是哪種類型。 –