GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 48 / 0 / 48
Functions: 100.0% 24 / 0 / 24
Branches: 100.0% 24 / 0 / 24

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/22
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> > > > 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