src/comb/seq/ifact/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../../math/mul_mod/lib.hpp" | ||
| 4 | #include "../inv/lib.hpp" | ||
| 5 | |||
| 6 | namespace tifa_libs { | ||
| 7 | |||
| 8 | // (i!)^{-1} from i=0..n-1 | ||
| 9 | 6453 | CEXP vecuu gen_ifact(u32 n, u64 mod, vecuu inv) NE { | |
| 10 |
2/2✓ Branch 4 taken 686061153 times.
✓ Branch 5 taken 6453 times.
|
686067606 | flt_ (u32, i, 2, n) inv[i] = mul_mod_u(inv[i], inv[i - 1], mod); |
| 11 | 6453 | return inv; | |
| 12 | } | ||
| 13 | // (i!)^{-1} from i=0..n-1 | ||
| 14 | 6453 | CEXP vecuu gen_ifact(u32 n, u64 mod) NE { return gen_ifact(n, mod, gen_inv(n, mod)); } | |
| 15 | // (i!)^{-1} from i=0..n-1 | ||
| 16 | template <class mint> | ||
| 17 | 338 | CEXP vec<mint> gen_ifact(u32 n, vec<mint> inv) NE { | |
| 18 |
22/22std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> > > >):
✓ Branch 3 taken 1511111 times.
✓ Branch 4 taken 11 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<15l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<15l> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<15l> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<15l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<15l> > > >):
✓ Branch 3 taken 4533333 times.
✓ Branch 4 taken 33 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > >):
✓ Branch 3 taken 9066656 times.
✓ Branch 4 taken 66 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<14l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<14l> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<14l> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<14l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<14l> > > >):
✓ Branch 3 taken 1511111 times.
✓ Branch 4 taken 11 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<15l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<15l> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<15l> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<15l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<15l> > > >):
✓ Branch 3 taken 4533333 times.
✓ Branch 4 taken 33 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > > >):
✓ Branch 3 taken 1000996 times.
✓ Branch 4 taken 2 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<14l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<14l> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<14l> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<14l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<14l> > > >):
✓ Branch 3 taken 1511111 times.
✓ Branch 4 taken 11 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<15l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<15l> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<15l> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<15l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<15l> > > >):
✓ Branch 3 taken 4533333 times.
✓ Branch 4 taken 33 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > > >):
✓ Branch 3 taken 1000996 times.
✓ Branch 4 taken 2 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > >):
✓ Branch 3 taken 10067652 times.
✓ Branch 4 taken 68 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > tifa_libs::gen_ifact<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int, std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > >):
✓ Branch 3 taken 10067652 times.
✓ Branch 4 taken 68 times.
|
49337622 | flt_ (u32, i, 2, n) inv[i] *= inv[i - 1]; |
| 19 | 338 | return inv; | |
| 20 | } | ||
| 21 | // (i!)^{-1} from i=0..n-1 | ||
| 22 | template <class mint> | ||
| 23 | 338 | CEXP vec<mint> gen_ifact(u32 n) NE { return gen_ifact(n, gen_inv<mint>(n)); } | |
| 24 | |||
| 25 | } // namespace tifa_libs | ||
| 26 |