pub trait ModularInteger: Sized + PartialEq + Add<Self, Output = Self> + Sub<Self, Output = Self> + Neg<Output = Self> + Mul<Self, Output = Self> {
    type Base;

    fn modulus(&self) -> Self::Base;
    fn residue(&self) -> Self::Base;
    fn is_zero(&self) -> bool;
    fn convert(&self, n: Self::Base) -> Self;
    fn double(self) -> Self;
    fn square(self) -> Self;
}
Expand description

Represents an number defined in a modulo ring ℤ/nℤ

The operators should panic if the modulus of two number are not the same.

Required Associated Types

The underlying representation type of the integer

Required Methods

Return the modulus of the ring

Return the normalized residue of this integer in the ring

Check if the integer is zero

Convert an normal integer into the same ring.

This method should be perferred over the static constructor to prevent unnecessary overhead of pre-computation.

Calculate the value of self + self

Calculate the value of self * self

Implementors