Expand description
Traits for multiplying two numbers modulo another number.
The traits are ModMul, ModMulAssign,
ModMulPrecomputed, and
ModMulPrecomputedAssign.
ModMulPrecomputed and
ModMulPrecomputedAssign are useful when having to make
several multiplications modulo the same modulus.
§mod_mul
use malachite_base::num::arithmetic::traits::ModMul;
assert_eq!(2u8.mod_mul(3, 7), 6);
assert_eq!(7u32.mod_mul(3, 10), 1);§mod_mul_assign
use malachite_base::num::arithmetic::traits::ModMulAssign;
let mut n = 2u8;
n.mod_mul_assign(3, 7);
assert_eq!(n, 6);
let mut n = 7u32;
n.mod_mul_assign(3, 10);
assert_eq!(n, 1);§mod_mul_precomputed
use malachite_base::num::arithmetic::traits::ModMulPrecomputed;
let data = u32::precompute_mod_mul_data(&7);
assert_eq!(2u32.mod_mul_precomputed(3, 7, &data), 6);
assert_eq!(5u32.mod_mul_precomputed(3, 7, &data), 1);
assert_eq!(4u32.mod_mul_precomputed(4, 7, &data), 2);
let data = u64::precompute_mod_mul_data(&10);
assert_eq!(7u64.mod_mul_precomputed(3, 10, &data), 1);
assert_eq!(4u64.mod_mul_precomputed(9, 10, &data), 6);
assert_eq!(5u64.mod_mul_precomputed(8, 10, &data), 0);
let data = u8::precompute_mod_mul_data(&7);
assert_eq!(2u8.mod_mul_precomputed(3, 7, &data), 6);
assert_eq!(5u8.mod_mul_precomputed(3, 7, &data), 1);
assert_eq!(4u8.mod_mul_precomputed(4, 7, &data), 2);
let data = u16::precompute_mod_mul_data(&10);
assert_eq!(7u16.mod_mul_precomputed(3, 10, &data), 1);
assert_eq!(4u16.mod_mul_precomputed(9, 10, &data), 6);
assert_eq!(5u16.mod_mul_precomputed(8, 10, &data), 0);
let data = u128::precompute_mod_mul_data(&7);
assert_eq!(2u128.mod_mul_precomputed(3, 7, &data), 6);
assert_eq!(5u128.mod_mul_precomputed(3, 7, &data), 1);
assert_eq!(4u128.mod_mul_precomputed(4, 7, &data), 2);
let data = u128::precompute_mod_mul_data(&10);
assert_eq!(7u128.mod_mul_precomputed(3, 10, &data), 1);
assert_eq!(4u128.mod_mul_precomputed(9, 10, &data), 6);
assert_eq!(5u128.mod_mul_precomputed(8, 10, &data), 0);§mod_mul_precomputed_assign
use malachite_base::num::arithmetic::traits::{ModMulPrecomputed, ModMulPrecomputedAssign};
let data = u8::precompute_mod_mul_data(&7);
let mut x = 2u8;
x.mod_mul_precomputed_assign(3, 7, &data);
assert_eq!(x, 6);
let mut x = 5u8;
x.mod_mul_precomputed_assign(3, 7, &data);
assert_eq!(x, 1);
let mut x = 4u8;
x.mod_mul_precomputed_assign(4, 7, &data);
assert_eq!(x, 2);
let data = u32::precompute_mod_mul_data(&10);
let mut x = 7u32;
x.mod_mul_precomputed_assign(3, 10, &data);
assert_eq!(x, 1);
let mut x = 4u32;
x.mod_mul_precomputed_assign(9, 10, &data);
assert_eq!(x, 6);
let mut x = 5u32;
x.mod_mul_precomputed_assign(8, 10, &data);
assert_eq!(x, 0);