src/lalg/mat/det_rd/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../lfsr_bm/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | |||
| 7 | // OK for matsp | ||
| 8 | template <class Mat, class Gn, class Is0> | ||
| 9 | requires requires(Is0 is0, TPN Mat::val_t t) { | ||
| 10 | { is0(t) } -> std::same_as<bool>; | ||
| 11 | } | ||
| 12 | 144 | auto det_rd(Mat mat, Gn& gen, Is0&& is0) NE { | |
| 13 | using T = TPN Mat::val_t; | ||
| 14 | 144 | cu32 n = mat.row(); | |
| 15 |
6/12auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
auto tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&):
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
|
144 | assert(n == mat.col()); |
| 16 | 432 | auto gen2 = [&gen](u32 n) NE { | |
| 17 | 432 | vec<T> v(n); | |
| 18 | 432 | generate(v, gen); | |
| 19 | 432 | return v; | |
| 20 | }; | ||
| 21 | 288 | vec<T> u = gen2(n), v = gen2(n), diag = gen2(n), _(n * 2); | |
| 22 |
12/12tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 103710 times.
✓ Branch 1 taken 24 times.
|
622404 | flt_ (u32, i, 0, n * 2) { |
| 23 | 622260 | _[i] = std::transform_reduce(begin(u), end(u), begin(v), T{}); | |
| 24 |
12/12tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 3 taken 294133594 times.
✓ Branch 4 taken 103710 times.
|
1765423824 | flt_ (u32, i, 0, n) v[i] *= diag[i]; |
| 25 | 622260 | v = mat.lproj(v); | |
| 26 | } | ||
| 27 | 144 | T res = lfsr_bm(_, std::forward<Is0>(is0)).back() / std::reduce(begin(diag), end(diag), T(1), std::multiplies<T>()); | |
| 28 |
12/12tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
tifa_libs::det_rd<tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&>(tifa_libs::matsp<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >, tifa_libs::rand_gen<unsigned int>&, main::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}&)::{lambda(unsigned int)#1}::operator()(unsigned int) const:
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 11 times.
|
144 | retif_(((n & 1) == 1), -res, res); |
| 29 | 144 | } | |
| 30 | |||
| 31 | } // namespace tifa_libs | ||
| 32 |