Function ring_algorithm::fast_chinese_remainder_theorem
source · [−]pub fn fast_chinese_remainder_theorem<T>(u: &[T], m: &[T]) -> T where
T: Sized + Clone + Eq + Zero + One + RingNormalize,
for<'x> &'x T: EuclideanRingOperation<T>,
Expand description
Chinese remainder theorem
m.len()
must be $2^k~(k=1,2,3,\ldots)
$ and u.len() == m.len()
use ring_algorithm::fast_chinese_remainder_theorem;
let u = vec![2, 3, 2, 6];
let m = vec![3, 5, 7, 11];
let a = fast_chinese_remainder_theorem::<i32>(&u, &m);
for (u, m) in u.iter().zip(m.iter()) {
assert_eq!((a - u) % m, 0);
}