[][src]Trait verified::Gcd

pub trait Gcd<Rhs> {
    type Output;
}

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

Example

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

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

Associated Types

type Output

The greatest common divisor.

Loading content...

Implementors

impl Gcd<UTerm> for UTerm[src]

gcd(0, 0) = 0

type Output = UTerm

impl Gcd<Z0> for Z0[src]

type Output = Z0

impl<U> Gcd<NInt<U>> for Z0 where
    U: Unsigned + NonZero
[src]

type Output = PInt<U>

impl<U> Gcd<PInt<U>> for Z0 where
    U: Unsigned + NonZero
[src]

type Output = PInt<U>

impl<U> Gcd<Z0> for NInt<U> where
    U: Unsigned + NonZero
[src]

type Output = PInt<U>

impl<U> Gcd<Z0> for PInt<U> where
    U: Unsigned + NonZero
[src]

type Output = PInt<U>

impl<U1, U2> Gcd<NInt<U2>> for NInt<U1> where
    U1: Unsigned + NonZero + Gcd<U2>,
    U2: Unsigned + NonZero,
    <U1 as Gcd<U2>>::Output: Unsigned,
    <U1 as Gcd<U2>>::Output: NonZero
[src]

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

impl<U1, U2> Gcd<NInt<U2>> for PInt<U1> where
    U1: Unsigned + NonZero + Gcd<U2>,
    U2: Unsigned + NonZero,
    <U1 as Gcd<U2>>::Output: Unsigned,
    <U1 as Gcd<U2>>::Output: NonZero
[src]

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

impl<U1, U2> Gcd<PInt<U2>> for NInt<U1> where
    U1: Unsigned + NonZero + Gcd<U2>,
    U2: Unsigned + NonZero,
    <U1 as Gcd<U2>>::Output: Unsigned,
    <U1 as Gcd<U2>>::Output: NonZero
[src]

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

impl<U1, U2> Gcd<PInt<U2>> for PInt<U1> where
    U1: Unsigned + NonZero + Gcd<U2>,
    U2: Unsigned + NonZero,
    <U1 as Gcd<U2>>::Output: Unsigned,
    <U1 as Gcd<U2>>::Output: NonZero
[src]

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

impl<X> Gcd<UTerm> for X where
    X: Unsigned + NonZero
[src]

gcd(x, 0) = x

type Output = X

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

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

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

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

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

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

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

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

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

impl<Xp, Yp> Gcd<UInt<Yp, B1>> for UInt<Xp, B1> where
    UInt<Xp, B1>: Max<UInt<Yp, B1>>,
    UInt<Xp, B1>: Min<UInt<Yp, B1>>,
    UInt<Yp, B1>: Max<UInt<Xp, B1>>,
    UInt<Yp, B1>: Min<UInt<Xp, B1>>,
    <UInt<Xp, B1> as Max<UInt<Yp, B1>>>::Output: Sub<<UInt<Xp, B1> as Min<UInt<Yp, B1>>>::Output>,
    <<UInt<Xp, B1> as Max<UInt<Yp, B1>>>::Output as Sub<<UInt<Xp, B1> as Min<UInt<Yp, B1>>>::Output>>::Output: Gcd<<UInt<Xp, B1> as Min<UInt<Yp, B1>>>::Output>, 
[src]

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

impl<Y> Gcd<Y> for UTerm where
    Y: Unsigned + NonZero
[src]

gcd(0, y) = y

type Output = Y

Loading content...