Gcd in typenum::type_operators - Rust
Description: A type operator that computes the greatest common divisor of `Self` and `Rhs`.
Keywords: rust, rustlang, rust-lang, Gcd

# Trait typenum::type_operators::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.

## Implementors§

source§

### impl Gcd<Z0> for Z0

§

#### type Output = Z0

source§

### impl Gcd<UTerm> for U0

gcd(0, 0) = 0

§

#### type Output = UTerm

source§

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

§

#### 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,

§

#### 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,

§

#### 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,

§

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

source§

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

§

#### type Output = PInt<U>

source§

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

§

#### type Output = PInt<U>

source§

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

§

#### type Output = PInt<U>

source§

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

§

#### type Output = PInt<U>

source§

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

gcd(x, 0) = x

§

#### type Output = 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

§

#### 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

§

#### 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

§

#### 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.

§

#### 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

§

#### type Output = Y