Skip to main content

Gcd

Trait Gcd 

Source
pub trait Gcd<Rhs> {
    type Output;
}
Expand description

A type operator that computes the greatest common divisor of Self and Rhs.

§Example

use typenum::{Gcd, Unsigned, U12, U8};

assert_eq!(<U12 as Gcd<U8>>::Output::to_i32(), 4);

Required Associated Types§

Source

type Output

The greatest common divisor.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl Gcd<UTerm> for U0

gcd(0, 0) = 0

Source§

impl Gcd<Z0> for Z0

Source§

impl<U1, U2> Gcd<NInt<U2>> for NInt<U1>
where U1: Unsigned + NonZero + Gcd<U2>, U2: Unsigned + NonZero, Gcf<U1, U2>: Unsigned + NonZero,

Source§

type Output = PInt<<U1 as Gcd<U2>>::Output>

Source§

impl<U1, U2> Gcd<NInt<U2>> for PInt<U1>
where U1: Unsigned + NonZero + Gcd<U2>, U2: Unsigned + NonZero, Gcf<U1, U2>: Unsigned + NonZero,

Source§

type Output = PInt<<U1 as Gcd<U2>>::Output>

Source§

impl<U1, U2> Gcd<PInt<U2>> for NInt<U1>
where U1: Unsigned + NonZero + Gcd<U2>, U2: Unsigned + NonZero, Gcf<U1, U2>: Unsigned + NonZero,

Source§

type Output = PInt<<U1 as Gcd<U2>>::Output>

Source§

impl<U1, U2> Gcd<PInt<U2>> for PInt<U1>
where U1: Unsigned + NonZero + Gcd<U2>, U2: Unsigned + NonZero, Gcf<U1, U2>: Unsigned + NonZero,

Source§

type Output = PInt<<U1 as Gcd<U2>>::Output>

Source§

impl<U> Gcd<NInt<U>> for Z0
where U: Unsigned + NonZero,

Source§

impl<U> Gcd<PInt<U>> for Z0
where U: Unsigned + NonZero,

Source§

impl<U> Gcd<Z0> for NInt<U>
where U: Unsigned + NonZero,

Source§

impl<U> Gcd<Z0> for PInt<U>
where U: Unsigned + NonZero,

Source§

impl<X> Gcd<UTerm> for X
where X: Unsigned + NonZero,

gcd(x, 0) = x

Source§

impl<Xp, Yp> Gcd<UInt<Yp, B0>> for UInt<Xp, B0>
where Xp: Gcd<Yp>, UInt<Xp, B0>: NonZero, UInt<Yp, B0>: NonZero,

gcd(x, y) = 2*gcd(x/2, y/2) if both x and y even

Source§

type Output = UInt<<Xp as Gcd<Yp>>::Output, B0>

Source§

impl<Xp, Yp> Gcd<UInt<Yp, B0>> for UInt<Xp, B1>
where UInt<Xp, B1>: Gcd<Yp>, UInt<Yp, B0>: NonZero,

gcd(x, y) = gcd(x, y/2) if x odd and y even

Source§

type Output = <UInt<Xp, B1> as Gcd<Yp>>::Output

Source§

impl<Xp, Yp> Gcd<UInt<Yp, B1>> for UInt<Xp, B0>
where Xp: Gcd<UInt<Yp, B1>>, UInt<Xp, B0>: NonZero,

gcd(x, y) = gcd(x/2, y) if x even and y odd

Source§

type Output = <Xp as Gcd<UInt<Yp, B1>>>::Output

Source§

impl<Xp, Yp> Gcd<UInt<Yp, B1>> for UInt<Xp, B1>
where UInt<Xp, B1>: Max<UInt<Yp, B1>> + Min<UInt<Yp, B1>>, UInt<Yp, B1>: Max<UInt<Xp, B1>> + Min<UInt<Xp, B1>>, Maximum<UInt<Xp, B1>, UInt<Yp, B1>>: Sub<Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>, Diff<Maximum<UInt<Xp, B1>, UInt<Yp, B1>>, Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>: Gcd<Minimum<UInt<Xp, B1>, UInt<Yp, B1>>>,

gcd(x, y) = gcd([max(x, y) - min(x, y)], min(x, y)) if both x and y odd

This will immediately invoke the case for x even and y odd because the difference of two odd numbers is an even number.

Source§

type Output = <<<UInt<Xp, B1> as Max<UInt<Yp, B1>>>::Output as Sub<<UInt<Xp, B1> as Min<UInt<Yp, B1>>>::Output>>::Output as Gcd<<UInt<Xp, B1> as Min<UInt<Yp, B1>>>::Output>>::Output

Source§

impl<Y> Gcd<Y> for U0
where Y: Unsigned + NonZero,

gcd(0, y) = y