num/trunc_series.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include <array> | ||
| 4 | #include <cstddef> | ||
| 5 | |||
| 6 | namespace wala { | ||
| 7 | |||
| 8 | // Truncated polynomial mod x^N over num | ||
| 9 | template <typename num, int N> struct trunc_series { | ||
| 10 | 2304 | std::array<num, size_t(N)> a{}; | |
| 11 | 67544 | num& operator[](int i) { return a[size_t(i)]; } | |
| 12 | 122160 | const num& operator[](int i) const { return a[size_t(i)]; } | |
| 13 | 7856 | num* data() { return a.data(); } | |
| 14 | 6464 | const num* data() const { return a.data(); } | |
| 15 |
6/6wala::trunc_series<wala::modnum<1000000007>, 2>::operator+=(wala::trunc_series<wala::modnum<1000000007>, 2> const&):
✓ Branch 15 → 3 taken 8064 times.
✓ Branch 15 → 16 taken 4032 times.
wala::trunc_series<wala::modnum<1000000007>, 3>::operator+=(wala::trunc_series<wala::modnum<1000000007>, 3> const&):
✓ Branch 15 → 3 taken 12096 times.
✓ Branch 15 → 16 taken 4032 times.
wala::trunc_series<wala::modnum<998244353>, 3>::operator+=(wala::trunc_series<wala::modnum<998244353>, 3> const&):
✓ Branch 15 → 3 taken 12096 times.
✓ Branch 15 → 16 taken 4032 times.
|
44352 | trunc_series& operator+=(const trunc_series& o) { for (int i = 0; i < N; i++) a[i] += o.a[i]; return *this; } |
| 16 | ✗ | friend trunc_series operator+(trunc_series x, const trunc_series& y) { x += y; return x; } | |
| 17 |
6/6wala::trunc_series<wala::modnum<1000000007>, 2>::operator-=(wala::trunc_series<wala::modnum<1000000007>, 2> const&):
✓ Branch 15 → 3 taken 36 times.
✓ Branch 15 → 16 taken 18 times.
wala::trunc_series<wala::modnum<1000000007>, 3>::operator-=(wala::trunc_series<wala::modnum<1000000007>, 3> const&):
✓ Branch 15 → 3 taken 54 times.
✓ Branch 15 → 16 taken 18 times.
wala::trunc_series<wala::modnum<998244353>, 3>::operator-=(wala::trunc_series<wala::modnum<998244353>, 3> const&):
✓ Branch 15 → 3 taken 54 times.
✓ Branch 15 → 16 taken 18 times.
|
198 | trunc_series& operator-=(const trunc_series& o) { for (int i = 0; i < N; i++) a[i] -= o.a[i]; return *this; } |
| 18 | 54 | friend trunc_series operator-(trunc_series x, const trunc_series& y) { x -= y; return x; } | |
| 19 | 12216 | friend trunc_series operator*(const trunc_series& x, const trunc_series& y) { | |
| 20 | 12216 | trunc_series r; | |
| 21 |
12/12wala::operator*(wala::trunc_series<wala::modnum<1000000007>, 2> const&, wala::trunc_series<wala::modnum<1000000007>, 2> const&):
✓ Branch 29 → 5 taken 12216 times.
✓ Branch 29 → 30 taken 8144 times.
✓ Branch 31 → 32 taken 8144 times.
✓ Branch 31 → 33 taken 4072 times.
wala::operator*(wala::trunc_series<wala::modnum<1000000007>, 3> const&, wala::trunc_series<wala::modnum<1000000007>, 3> const&):
✓ Branch 29 → 5 taken 24432 times.
✓ Branch 29 → 30 taken 12216 times.
✓ Branch 31 → 32 taken 12216 times.
✓ Branch 31 → 33 taken 4072 times.
wala::operator*(wala::trunc_series<wala::modnum<998244353>, 3> const&, wala::trunc_series<wala::modnum<998244353>, 3> const&):
✓ Branch 29 → 5 taken 24432 times.
✓ Branch 29 → 30 taken 12216 times.
✓ Branch 31 → 32 taken 12216 times.
✓ Branch 31 → 33 taken 4072 times.
|
228032 | for (int i = 0; i < N; i++) for (int j = 0; j < N - i; j++) r[i + j] += x[i] * y[j]; |
| 22 | 12216 | return r; | |
| 23 | } | ||
| 24 | ✗ | trunc_series& operator*=(const trunc_series& o) { return *this = *this * o; } | |
| 25 |
1/2✓ Branch 20 → 21 taken 2304 times.
✗ Branch 20 → 25 not taken.
|
4608 | friend bool operator==(const trunc_series&, const trunc_series&) = default; |
| 26 | }; | ||
| 27 | |||
| 28 | } // namespace wala | ||
| 29 |