pub struct BlackBoxMatrixImpl<R, F> { /* private fields */ }
Implementations§
Source§impl<R, F> BlackBoxMatrixImpl<R, F>
impl<R, F> BlackBoxMatrixImpl<R, F>
Sourcepub fn new(shape: (usize, usize), apply_fn: F) -> Self
pub fn new(shape: (usize, usize), apply_fn: F) -> Self
Examples found in repository?
crates/competitive/src/math/black_box_matrix.rs (lines 266-275)
257 fn black_box_determinant(&self) -> MInt<M>
258 where
259 M: MIntConvert<u64>,
260 {
261 assert_eq!(self.shape().0, self.shape().1);
262 let n = self.shape().0;
263 let mut rng = Xorshift::new();
264 let d: Vec<MInt<M>> = (0..n).map(|_| MInt::from(rng.rand64())).collect();
265 let det_d = d.iter().fold(MInt::one(), |s, x| s * x);
266 let ad = BlackBoxMatrixImpl::<AddMulOperation<MInt<M>>, _>::new(
267 self.shape(),
268 |v: &[MInt<M>]| {
269 let mut w = self.apply(v);
270 for (w, d) in w.iter_mut().zip(&d) {
271 *w *= d;
272 }
273 w
274 },
275 );
276 let p = ad.minimal_polynomial();
277 let det_ad = if n % 2 == 0 { p[0] } else { -p[0] };
278 det_ad / det_d
279 }
Trait Implementations§
Source§impl<R, F> BlackBoxMatrix<R> for BlackBoxMatrixImpl<R, F>
impl<R, F> BlackBoxMatrix<R> for BlackBoxMatrixImpl<R, F>
Source§impl<R, F> Clone for BlackBoxMatrixImpl<R, F>where
F: Clone,
impl<R, F> Clone for BlackBoxMatrixImpl<R, F>where
F: Clone,
Auto Trait Implementations§
impl<R, F> Freeze for BlackBoxMatrixImpl<R, F>where
F: Freeze,
impl<R, F> RefUnwindSafe for BlackBoxMatrixImpl<R, F>where
F: RefUnwindSafe,
impl<R, F> Send for BlackBoxMatrixImpl<R, F>where
F: Send,
impl<R, F> Sync for BlackBoxMatrixImpl<R, F>where
F: Sync,
impl<R, F> Unpin for BlackBoxMatrixImpl<R, F>where
F: Unpin,
impl<R, F> UnwindSafe for BlackBoxMatrixImpl<R, F>where
F: UnwindSafe,
Blanket Implementations§
Source§impl<M, B> BlackBoxMIntMatrix<M> for B
impl<M, B> BlackBoxMIntMatrix<M> for B
fn minimal_polynomial(&self) -> Vec<MInt<M>>where
M: MIntConvert<u64>,
fn apply_pow<C>(&self, b: Vec<MInt<M>>, k: usize) -> Vec<MInt<M>>
fn black_box_determinant(&self) -> MInt<M>where
M: MIntConvert<u64>,
fn black_box_linear_equation(&self, b: Vec<MInt<M>>) -> Option<Vec<MInt<M>>>where
M: MIntConvert<u64>,
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