pub struct FixedTrinomialSolinas<const P1: u8, const P2: u8, const K: imax>();Expand description
A modular reducer for trinomial Solinas numbers 2^P1 - 2^P2 + K as modulus.
Supports P1 up to 127, P2 < P1, and odd signed K with |K| < 2^P2. All inputs and outputs are umax (currently u128).
The P1 is limited to 127 so that overflow checks aren’t necessary. This covers all trinomial
Solinas primes within the range of umax (i.e. u128).
§Example
use num_modular::{FixedTrinomialSolinas, Reducer};
const P1: u8 = 31;
const P2: u8 = 13;
const K: i128 = 1;
let modulus = (1u128 << P1) - (1u128 << P2) + (K as u128);
let reducer = FixedTrinomialSolinas::<P1, P2, K>::new(&modulus);
let a = reducer.transform(1000);
let b = reducer.transform(2000);
assert_eq!(reducer.residue(reducer.mul(&a, &b)), (1000u128 * 2000) % modulus);Implementations§
Trait Implementations§
Source§impl<const P1: u8, const P2: u8, const K: imax> Clone for FixedTrinomialSolinas<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: imax> Clone for FixedTrinomialSolinas<P1, P2, K>
Source§fn clone(&self) -> FixedTrinomialSolinas<P1, P2, K>
fn clone(&self) -> FixedTrinomialSolinas<P1, P2, K>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl<const P1: u8, const P2: u8, const K: imax> Copy for FixedTrinomialSolinas<P1, P2, K>
Source§impl<const P1: u8, const P2: u8, const K: imax> Reducer<u128> for FixedTrinomialSolinas<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: imax> Reducer<u128> for FixedTrinomialSolinas<P1, P2, K>
Auto Trait Implementations§
impl<const P1: u8, const P2: u8, const K: i128> Freeze for FixedTrinomialSolinas<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i128> RefUnwindSafe for FixedTrinomialSolinas<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i128> Send for FixedTrinomialSolinas<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i128> Sync for FixedTrinomialSolinas<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i128> Unpin for FixedTrinomialSolinas<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i128> UnsafeUnpin for FixedTrinomialSolinas<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i128> UnwindSafe for FixedTrinomialSolinas<P1, P2, K>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more