Expand description

This crate provides efficient Modular arithmetic operations for various integer types, including primitive integers and num-bigint. The latter option is enabled optionally.

To achieve fast modular arithmetics, convert integers to any ModularInteger implementation use static new() or associated ModularInteger::convert() functions. Some builtin implementations of ModularInteger includes MontgomeryInt and MersenneInt.

Example code:

use num_modular::{ModularCoreOps, ModularInteger, MontgomeryInt};

// directly using methods in ModularCoreOps
let (x, y, m) = (12u8, 13u8, 5u8);
assert_eq!(x.mulm(y, &m), x * y % m);

// convert integers into ModularInteger
let mx = MontgomeryInt::new(x, m);
let my = mx.convert(y); // faster than static MontgomeryInt::new(y, m)
assert_eq!((mx * my).residue(), x * y % m);

Structs

An unsigned integer modulo (pseudo) Mersenne primes 2^P - K, it supports P up to 127 and K < 2^(P-1)

An integer represented in Montgomery form.

A double width integer type based on the largest built-in integer type umax (currently u128), and to support double-width operations on it is the only goal for this type.

Traits

Provides a utility function to convert signed integers into unsigned modular form

Core modular arithmetic operations.

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

Collection of common modular arithmetic operations

Modular power functions

Math symbols related to modular arithmetics

Core unary modular arithmetics

Operations of a integer represented in Montgomery form. This data type can be used in place of a normal integer with regard to modular arithmetics.

Type Definitions

Alias of the builtin integer type with max width (currently u128)