GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 84 / 0 / 84
Functions: 100.0% 17 / 0 / 17
Branches: 93.3% 28 / 0 / 30

src/comb/seq/pows/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../../math/qpow/mod/lib.hpp"
4 #include "../../../nt/lsieve/impl1/lib.hpp"
5
6 namespace tifa_libs {
7 namespace gen_pows_impl_ {
8 struct ls_pows {
9 static inline u64 b, mod;
10 vecuu pows;
11
12 protected:
13 6222 CEXPE ls_pows(u32 n) NE : pows(n) {
14
1/2
✓ Branch 0 taken 3111 times.
✗ Branch 1 not taken.
3111 if (n > 1) pows[1] = 1;
15 3111 }
16 220804181 void prime(u32 p) NE { pows[p] = qpow_mod(p, b, mod); }
17 3079150716 void coprime(u32 i, u32 j) NE { pows[i * j] = mul_mod_u(pows[i], pows[j], mod); }
18 1089283604 void not_coprime(u32 i, u32 j) NE { coprime(i, j); }
19 };
20 } // namespace gen_pows_impl_
21
22 // i^{b} from i=0..n-1
23 3284 CEXP vecuu gen_pows(u32 n, u64 b, u64 mod) NE {
24
2/2
✓ Branch 0 taken 173 times.
✓ Branch 1 taken 3111 times.
3457 retif_((!b) [[unlikely]], vecuu(n, mod > 1));
25
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 3111 times.
3111 retif_((!n) [[unlikely]], {});
26 3111 gen_pows_impl_::ls_pows::b = b;
27 3111 gen_pows_impl_::ls_pows::mod = mod;
28 3111 return lsieve<gen_pows_impl_::ls_pows>(n).pows;
29 }
30 // i^{b} from i=0..n-1
31 template <class mint>
32 722 CEXP vec<mint> gen_pows(u32 n, u64 b) NE {
33 722 vec<mint> ans(n);
34 722 auto _ = gen_pows(n, b, mint::mod());
35
24/24
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > > > tifa_libs::gen_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 140530039 times.
✓ Branch 4 taken 30 times.
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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 140530039 times.
✓ Branch 4 taken 30 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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<15l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 421590117 times.
✓ Branch 4 taken 90 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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > >(unsigned int, unsigned long):
✓ Branch 3 taken 843180234 times.
✓ Branch 4 taken 180 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > > > tifa_libs::gen_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 140530039 times.
✓ Branch 4 taken 30 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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<15l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 140530039 times.
✓ Branch 4 taken 30 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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 4004000 times.
✓ Branch 4 taken 8 times.
std::vector<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, std::allocator<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > > > tifa_libs::gen_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 140530039 times.
✓ Branch 4 taken 30 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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<15l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 140530039 times.
✓ Branch 4 taken 30 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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int, unsigned long):
✓ Branch 3 taken 4004000 times.
✓ Branch 4 taken 8 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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int, unsigned long):
✓ Branch 3 taken 285064078 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_pows<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int, unsigned long):
✓ Branch 3 taken 847184234 times.
✓ Branch 4 taken 188 times.
3248207619 flt_ (u32, i, 0, n) ans[i] = _[i];
36 722 return ans;
37 722 }
38
39 } // namespace tifa_libs
40