src/fps/pow/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../math/qpow/basic/lib.hpp" | ||
| 4 | #include "../exp/lib.hpp" | ||
| 5 | #include "../ln/lib.hpp" | ||
| 6 | #include "../shl/lib.hpp" | ||
| 7 | #include "../shr/lib.hpp" | ||
| 8 | |||
| 9 | namespace tifa_libs { | ||
| 10 | |||
| 11 | template <poly_c poly_t> | ||
| 12 | 210 | CEXP auto pow_fps(poly_t CR p, u64 y, u32 n = 0) NE { | |
| 13 | using mint = TPN poly_t::val_t; | ||
| 14 |
6/6auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 51 times.
✓ Branch 1 taken 19 times.
auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 51 times.
✓ Branch 1 taken 19 times.
auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 51 times.
✓ Branch 1 taken 19 times.
|
210 | if (!n) n = (u32)p.size(); |
| 15 |
6/6auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 66 times.
auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 66 times.
auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 66 times.
|
210 | if (y == 0) { |
| 16 | 12 | poly_t _(n); | |
| 17 |
3/6auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
|
12 | if (n) _[0] = 1; |
| 18 | 12 | return _; | |
| 19 | 12 | } | |
| 20 |
6/6auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 65 times.
auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 65 times.
auto tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > const&, unsigned long, unsigned int):
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 65 times.
|
198 | if (y == 1) return p; |
| 21 | 11915364 | u32 l0 = u32(find_if(p, [](cT_(mint) x) NE { return x != 0; }) - begin(p)); | |
| 22 |
6/6tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >) const:
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 48 times.
tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >) const:
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 48 times.
tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >) const:
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 48 times.
|
195 | if ((u128)l0 * y >= n) return poly_t(n); |
| 23 |
6/6tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >) const:
✓ Branch 0 taken 19 times.
✓ Branch 1 taken 29 times.
tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >) const:
✓ Branch 0 taken 19 times.
✓ Branch 1 taken 29 times.
tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >) const:
✓ Branch 0 taken 19 times.
✓ Branch 1 taken 29 times.
|
144 | if (l0) { |
| 24 | 57 | auto _ = shr_fps(p, l0), g = pow_fps(_, y, u32(n - l0 * y)); | |
| 25 | 57 | g.resize(n); | |
| 26 | 57 | return shl_fps(g, l0 * y); | |
| 27 | 57 | } | |
| 28 | 87 | auto _ = p; | |
| 29 | 87 | mint _0 = p[0]; | |
| 30 |
6/6tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >) const:
✓ Branch 2 taken 15 times.
✓ Branch 3 taken 14 times.
tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >) const:
✓ Branch 2 taken 15 times.
✓ Branch 3 taken 14 times.
tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >) const:
✓ Branch 2 taken 15 times.
✓ Branch 3 taken 14 times.
|
87 | if (_0 != 1) _ *= _0.inv(); |
| 31 |
6/6tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >) const:
✓ Branch 12 taken 15 times.
✓ Branch 13 taken 14 times.
tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >) const:
✓ Branch 12 taken 15 times.
✓ Branch 13 taken 14 times.
tifa_libs::pow_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > > > const&, unsigned long, unsigned int)::{lambda(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >)#1}::operator()(tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >) const:
✓ Branch 12 taken 15 times.
✓ Branch 13 taken 14 times.
|
87 | if (_ = exp_fps(ln_fps(_) * y); _0 != 1) _ *= qpow(_0, y); |
| 32 | 87 | return _.pre(n); | |
| 33 | 87 | } | |
| 34 | |||
| 35 | } // namespace tifa_libs | ||
| 36 |