src/nt/mfsum/du/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../../math/do_quot/lib.hpp" | ||
| 4 | #include "../../../util/alias/others/lib.hpp" | ||
| 5 | |||
| 6 | namespace tifa_libs { | ||
| 7 | |||
| 8 | template <class T, class SF, class SG, class SH> | ||
| 9 | requires requires(u64 x, SF f, SG g, SH h) { | ||
| 10 | { f(x) } -> std::same_as<T>; | ||
| 11 | { g(x) } -> std::same_as<T>; | ||
| 12 | { h(x) } -> std::same_as<T>; | ||
| 13 | } | ||
| 14 | class du_sieve { | ||
| 15 | cu64 sf_max; | ||
| 16 | SF sf; | ||
| 17 | SG sg; | ||
| 18 | SH sh; | ||
| 19 | hmap<u64, T> mem; | ||
| 20 | |||
| 21 | 42117188526 | CEXP T calc(u64 x) NE { | |
| 22 |
18/18tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 3477527354 times.
✓ Branch 1 taken 32227409 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 3477548416 times.
✓ Branch 1 taken 32228242 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 6955075770 times.
✓ Branch 1 taken 64455651 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 3477527354 times.
✓ Branch 1 taken 32227409 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 3477548416 times.
✓ Branch 1 taken 32228242 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 3477527354 times.
✓ Branch 1 taken 32227409 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 3477548416 times.
✓ Branch 1 taken 32228242 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 6955075770 times.
✓ Branch 1 taken 64455651 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 0 taken 6955075770 times.
✓ Branch 1 taken 64455651 times.
|
42117188526 | if (x <= sf_max) return sf(x); |
| 23 |
18/18tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 29142838 times.
✓ Branch 4 taken 3084571 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 29143623 times.
✓ Branch 4 taken 3084619 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 58286461 times.
✓ Branch 4 taken 6169190 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 29142838 times.
✓ Branch 4 taken 3084571 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 29143623 times.
✓ Branch 4 taken 3084619 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 29142838 times.
✓ Branch 4 taken 3084571 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 29143623 times.
✓ Branch 4 taken 3084619 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 58286461 times.
✓ Branch 4 taken 6169190 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::calc(unsigned long):
✓ Branch 3 taken 58286461 times.
✓ Branch 4 taken 6169190 times.
|
386733906 | if (auto d = mem.find(x); d != end(mem)) return d->second; |
| 24 | 37015140 | T ans = 0; | |
| 25 | 42154203090 | do_quot(x, [&](u64 l, u64 r, u64 q) NE { ans += (sg(r) - sg(l - 1)) * calc(q); }, 2); | |
| 26 | 37015140 | return mem[x] = (ans = sh(x) - ans) /= sg(1); | |
| 27 | } | ||
| 28 | |||
| 29 | public: | ||
| 30 | 576 | CEXP du_sieve(u64 sf_max, SF sf, SG sg, SH sh) NE : sf_max(sf_max), sf(sf), sg(sg), sh(sh) {} | |
| 31 | |||
| 32 |
9/18tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bd_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_bs_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 96 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md64_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<13l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_md_tag<14l> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 48 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms64_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 96 times.
tifa_libs::du_sieve<tifa_libs::mint_impl_::mint<tifa_libs::mint_ms_tag<998244353ul> >, main::{lambda(unsigned long)#1}, main::{lambda(unsigned long)#2}, main::{lambda(unsigned long)#3}>::operator()(unsigned long):
✗ Branch 0 not taken.
✓ Branch 1 taken 96 times.
|
576 | CEXP T operator()(u64 n) NE { retif_((!n) [[unlikely]], 0, calc(n)); } |
| 33 | }; | ||
| 34 | |||
| 35 | } // namespace tifa_libs | ||
| 36 |