use crate::num::basic::signeds::PrimitiveSigned;
use crate::num::basic::unsigneds::PrimitiveUnsigned;
use crate::num::conversion::traits::WrappingFrom;
use crate::test_util::num::arithmetic::mod_div::mod_div_euclidean;
pub fn mod_div_list_euclidean<
U: PrimitiveUnsigned + WrappingFrom<S>,
S: PrimitiveSigned + WrappingFrom<U>,
>(
b: U,
c: U,
m: U,
) -> Option<(U, U, U)> {
let q = mod_div_euclidean::<U, S>(b, c, m)?;
let length = c.gcd(m);
let stride = m / length;
Some((q % stride, stride, length))
}