This crate provides modular arithmetic integer types.
modtype::ModType
]```
type F = modtype::DefaultModType<1_000_000_007u64>;
asserteq!((F(1000000006) + F(2)).to_string(), "1"); ```
modtype::thread_local::ModType
]```
modtype::threadlocal::DefaultModType::with(57u32, |Z| { asserteq!(Z(42) + Z(15), Z(0)); }); ```
modtype::field_param::ModType
]``` use num::CheckedDiv as _;
let Z = modtype::field_param::DefaultModType::factory(1000u32);
asserteq!(Z(1).checkeddiv(&Z(777)), Some(Z(713))); // 777 × 713 ≡ 1 (mod 1000) ```
ModType
s can be customized via [modtype::Cartridge
].
```
type F = modtype::ModType
enum Cartridge {}
impl modtype::Cartridge for Cartridge { type Target = u64; type Features = modtype::DefaultFeatures;
// your implementation here
} ```