src/fps/cossin/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../math/qpow/basic/lib.hpp" | ||
| 4 | #include "../exp/lib.hpp" | ||
| 5 | |||
| 6 | namespace tifa_libs { | ||
| 7 | |||
| 8 | // @return [cos(p(x)), sin(p(x))] | ||
| 9 | template <poly_c poly_t> | ||
| 10 | requires(poly_t::ccore_t::ct_cat == CCORE::NTT) | ||
| 11 | 51 | CEXP auto cossin_fps(poly_t p, u32 n = 0) NE { | |
| 12 |
5/10auto tifa_libs::cossin_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<1012924417ul> > > >, unsigned int):
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
auto tifa_libs::cossin_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<1012924417ul> > > >, unsigned int):
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
auto tifa_libs::cossin_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> > > >, unsigned int):
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
auto tifa_libs::cossin_fps<tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > > >(tifa_libs::poly_impl_::poly<tifa_libs::polyntt_impl_::cconv_ntt<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<1012924417ul> > > >, unsigned int):
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
auto tifa_libs::cossin_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> > > >, unsigned int):
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
|
51 | if (!n) n = (u32)p.size(); |
| 13 | 51 | const auto i = qpow(poly_t::ccore_t::G, (poly_t::val_t::mod() - 1) / 4), | |
| 14 | 51 | inv2 = (poly_t::val_t::mod() + 1) / 2; | |
| 15 | 51 | (p *= i).resize(n); | |
| 16 | 51 | const auto expf = exp_fps(p), expnf = exp_fps(-p); | |
| 17 | 51 | return std::make_pair((expf + expnf) * inv2, (expnf - expf) * (i * inv2)); | |
| 18 | 51 | } | |
| 19 | |||
| 20 | } // namespace tifa_libs | ||
| 21 |