test/cpv_local/comb/gen.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // competitive-verifier: STANDALONE | ||
| 2 | #include "../../../src/comb/seq/fact/lib.hpp" | ||
| 3 | #include "../../../src/comb/seq/ifact/lib.hpp" | ||
| 4 | #include "../../../src/comb/seq/inv/lib.hpp" | ||
| 5 | #include "../../../src/comb/seq/invseq/lib.hpp" | ||
| 6 | #include "../../../src/comb/seq/ipowi/lib.hpp" | ||
| 7 | #include "../../../src/comb/seq/pows/lib.hpp" | ||
| 8 | #include "../../../src/math/ds/mint/md/lib.hpp" | ||
| 9 | #include "../../../src/math/ds/mint/md64/lib.hpp" | ||
| 10 | #include "../../../src/math/ds/mint/ms/lib.hpp" | ||
| 11 | #include "../../../src/math/ds/mint/ms64/lib.hpp" | ||
| 12 | #include "../../../src/math/qpow/basic/lib.hpp" | ||
| 13 | #include "../../../src/util/rand/lib.hpp" | ||
| 14 | #include "../base.hpp" | ||
| 15 | |||
| 16 | using namespace tifa_libs; | ||
| 17 | rand_gen<u64> g(1); | ||
| 18 | |||
| 19 | template <class mint> | ||
| 20 | 8 | void test_all(u32 n) { | |
| 21 | ✗ | [](u32 n) { // fact & ifact | |
| 22 | timer_(auto fact = gen_fact<mint>(n)); | ||
| 23 | timer_(auto ifact = gen_ifact<mint>(n)); | ||
| 24 | mint bf = 1; | ||
| 25 | flt_ (u32, i, 0, n) { | ||
| 26 | if (i) bf *= i; | ||
| 27 | check(fact[i], bf, check_param(i)); | ||
| 28 | check(ifact[i], bf.inv(), check_param(i)); | ||
| 29 | } | ||
| 30 |
4/8void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | }(n); |
| 31 | ✗ | [](u32 n) { // inv | |
| 32 | timer_(auto inv = gen_inv<mint>(n)); | ||
| 33 | flt_ (u32, i, 1, n) { | ||
| 34 | auto bf = mint{i}.inv(); | ||
| 35 | check(inv[i], bf, check_param(i)); | ||
| 36 | } | ||
| 37 |
4/8void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | }(n); |
| 38 | ✗ | [](u32 n) { // invseq | |
| 39 | vec<mint> seq; | ||
| 40 | timer_(std::generate_n(std::back_inserter(seq), n, [&] { return mint(g()); })); | ||
| 41 | auto invseq = gen_invseq(seq); | ||
| 42 | flt_ (u32, i, 0, n) { | ||
| 43 | auto bf = seq[i].inv(); | ||
| 44 | check(invseq[i], bf, check_param(i), check_param(seq[i])); | ||
| 45 | } | ||
| 46 |
4/8void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | }(n); |
| 47 | ✗ | [](u32 n) { // ipowi | |
| 48 | timer_(auto ipowi = gen_ipowi<mint>(n)); | ||
| 49 | flt_ (u32, i, 0, n) { | ||
| 50 | auto bf = qpow<mint>(i, i); | ||
| 51 | check(ipowi[i], bf, check_param(i)); | ||
| 52 | } | ||
| 53 |
4/8void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
8 | }(n); |
| 54 | auto test_pows = [](u32 n, u32 b) { // pows | ||
| 55 | timer_(auto pows = gen_pows<mint>(n, b)); | ||
| 56 | flt_ (u32, i, 0, n) { | ||
| 57 | auto bf = qpow<mint>(i, b); | ||
| 58 | check(pows[i], bf, check_param(i), check_param(b)); | ||
| 59 | } | ||
| 60 | }; | ||
| 61 |
16/32void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
|
8 | timer_(test_pows(n, 0)); |
| 62 |
16/32void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
|
8 | timer_(test_pows(n, 1)); |
| 63 |
16/32void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
|
8 | timer_(test_pows(n, 114514)); |
| 64 |
16/32void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<70l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<69l> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
void test_all<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> > >(unsigned int):
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
|
8 | timer_(test_pows(n, n)); |
| 65 | 8 | } | |
| 66 | |||
| 67 | using mints30 = mint_ms<998244353>; | ||
| 68 | using mints63 = mint_ms64<998244353>; | ||
| 69 | using mintd31 = mint_md<__LINE__>; | ||
| 70 | using mintd63 = mint_md64<__LINE__>; | ||
| 71 | |||
| 72 | 1 | int main() { | |
| 73 | 1 | mintd31::set_mod(1000000000 + 7); | |
| 74 | 1 | mintd63::set_mod(1000000000 + 7); | |
| 75 | |||
| 76 |
3/6✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
|
1 | timer_(test_all<mints30>(1000)); |
| 77 |
3/6✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
|
1 | timer_(test_all<mints63>(1000)); |
| 78 |
3/6✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
|
1 | timer_(test_all<mintd31>(1000)); |
| 79 |
3/6✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
|
1 | timer_(test_all<mintd63>(1000)); |
| 80 |
3/6✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
|
1 | timer_(test_all<mints30>(1'000'000)); |
| 81 |
3/6✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
|
1 | timer_(test_all<mints63>(1'000'000)); |
| 82 |
3/6✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
|
1 | timer_(test_all<mintd31>(1'000'000)); |
| 83 |
3/6✓ Branch 4 taken 1 time.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 time.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 time.
✗ Branch 11 not taken.
|
1 | timer_(test_all<mintd63>(1'000'000)); |
| 84 | 1 | } | |
| 85 |