pub struct FixedTrinomialSolinas64<const P1: u8, const P2: u8, const K: i64>();Expand description
A modular reducer for trinomial Solinas numbers 2^P1 - 2^P2 + K as modulus with 64-bit operands.
Supports P1 up to 64, P2 < P1, and odd signed K with |K| < 2^P2. All inputs and outputs are u64.
Uses u128 as the double-width intermediate for multiplication and reduction.
The modulus 2^P1 - 2^P2 + K must be prime for modular inverse and Fermat-based operations to be valid.
§Example
use num_modular::{FixedTrinomialSolinas64, Reducer};
const P1: u8 = 6;
const P2: u8 = 2;
const K: i64 = 1;
let modulus = (1u64 << P1) - (1u64 << P2) + (K as u64); // 2^6 - 2^2 + 1 = 61
let reducer = FixedTrinomialSolinas64::<P1, P2, K>::new(&modulus);
let a = reducer.transform(10);
let b = reducer.transform(20);
assert_eq!(reducer.residue(reducer.mul(&a, &b)), (10u64 * 20) % 61);Implementations§
Trait Implementations§
Source§impl<const P1: u8, const P2: u8, const K: i64> Clone for FixedTrinomialSolinas64<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i64> Clone for FixedTrinomialSolinas64<P1, P2, K>
Source§fn clone(&self) -> FixedTrinomialSolinas64<P1, P2, K>
fn clone(&self) -> FixedTrinomialSolinas64<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: i64> Copy for FixedTrinomialSolinas64<P1, P2, K>
Source§impl<const P1: u8, const P2: u8, const K: i64> Reducer<u64> for FixedTrinomialSolinas64<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i64> Reducer<u64> for FixedTrinomialSolinas64<P1, P2, K>
Auto Trait Implementations§
impl<const P1: u8, const P2: u8, const K: i64> Freeze for FixedTrinomialSolinas64<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i64> RefUnwindSafe for FixedTrinomialSolinas64<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i64> Send for FixedTrinomialSolinas64<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i64> Sync for FixedTrinomialSolinas64<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i64> Unpin for FixedTrinomialSolinas64<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i64> UnsafeUnpin for FixedTrinomialSolinas64<P1, P2, K>
impl<const P1: u8, const P2: u8, const K: i64> UnwindSafe for FixedTrinomialSolinas64<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