У меня есть следующий фрагмент кода:
use num_bigint::*; // 0.2.2
use num_traits::*; // 0.2.8
use std::ops::*;
fn xgcd(b: &BigInt, a: &BigInt) -> (BigInt, BigInt, BigInt) {
let mut x0: BigInt = One::one();
let mut x1: BigInt = Zero::zero();
let mut y0: BigInt = Zero::zero();
let mut y1: BigInt = One::one();
let mut q = 0;
while a != Zero::zero() {
q = b.div(a);
b = a;
a = &b.rem(a);
x0 = x1;
x1 = x0 - q * x1;
y0 = y1;
y1 = y0 - q * y1;
}
return (*b, x0, y0);
}
выдает следующую ошибку:
error[E0308]: mismatched types
--> src/lib.rs:12:13
|
12 | q = b.div(a);
| ^^^^^^^^ expected integer, found struct `num_bigint::bigint::BigInt`
|
= note: expected type `{integer}`
found type `num_bigint::bigint::BigInt`
Я посмотрел документацию num::BigInt
и там говорится, что на самом деле существует метод div
с BigInt
в качестве параметра, но каким-то образом компилятор решает не использовать это и вместо этого говорит мне, что я не могу разделить BigInt
с BigInt
. Есть ли способ исправить это?