pub trait Euclidean<T> where T: Copy + Ord + Mul<Output = Self> + Div<Output = Self> + Rem<Output = Self> + Default, Self: Sized, { fn gcd(x: T, y: T) -> T; fn lcm(x: T, y: T) -> Self; }