pub fn gcd_euclid<T: SemiArithmetic + for<'a> SubAssign<&'a T>>(x: T, y: T) -> Twhere for<'a> &'a T: PartialEq,