src/conv/add/naive_mod/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../../math/mul_mod/lib.hpp" | ||
| 4 | #include "../../../util/alias/others/lib.hpp" | ||
| 5 | |||
| 6 | namespace tifa_libs { | ||
| 7 | |||
| 8 | CEXP inline u32 CONV_NAIVE_MOD_THRESHOLD = 16; | ||
| 9 | 108 | CEXP vecuu conv_naive_mod(spnuu l, spnuu r, u64 mod, u32 ans_size = 0) NE { | |
| 10 |
3/6✓ Branch 1 taken 108 times.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 108 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 108 times.
|
108 | retif_((l.empty() || r.empty()) [[unlikely]], {}); |
| 11 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 108 times.
|
108 | if (!ans_size) ans_size = u32(l.size() + r.size() - 1); |
| 12 | 108 | vecuu ans(ans_size); | |
| 13 | 108 | u32 n = (u32)l.size(), m = (u32)r.size(); | |
| 14 |
4/4✓ Branch 0 taken 42 times.
✓ Branch 1 taken 66 times.
✓ Branch 2 taken 42 times.
✓ Branch 3 taken 66 times.
|
108 | auto &&l_ = n < m ? r : l, &&r_ = n < m ? l : r; |
| 15 |
2/2✓ Branch 0 taken 42 times.
✓ Branch 1 taken 66 times.
|
108 | if (n < m) swap(n, m); |
| 16 |
2/2✓ Branch 0 taken 336 times.
✓ Branch 1 taken 108 times.
|
444 | flt_ (u32, i, 0, n) |
| 17 |
2/2✓ Branch 5 taken 726 times.
✓ Branch 6 taken 336 times.
|
1062 | flt_ (u32, j, 0, min(m, ans_size - i)) ans[i + j] += mul_mod_u(l_[i], r_[j], mod); |
| 18 |
2/2✓ Branch 5 taken 438 times.
✓ Branch 6 taken 108 times.
|
546 | for (auto& i : ans) i %= mod; |
| 19 | 108 | return ans; | |
| 20 | 108 | } | |
| 21 | |||
| 22 | } // namespace tifa_libs | ||
| 23 |