GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 72 / 0 / 72
Functions: 100.0% 36 / 0 / 36
Branches: 83.3% 45 / 0 / 54

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/18
tifa_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/18
tifa_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/18
tifa_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