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

Collection of operations similar to ModularOps, but takes operands with references

Math symbols related to modular arithmetics

Core unary modular arithmetics

Operations of a integer represented in Montgomery form. Types implementing this trait can be used to construct a MontgomeryInt.

Type Definitions

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