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);
}