src/nt/lsieve/func/lib.hpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | #pragma once | ||
| 2 | |||
| 3 | #include "../../../util/alias/others/lib.hpp" | ||
| 4 | |||
| 5 | namespace tifa_libs { | ||
| 6 | |||
| 7 | struct ls_mpf { | ||
| 8 | vecu mpf; | ||
| 9 | |||
| 10 | protected: | ||
| 11 | 22 | CEXPE ls_mpf(u32 n) NE : mpf(n) { | |
| 12 |
2/2✓ Branch 0 taken 9 times.
✓ Branch 1 taken 2 times.
|
11 | if (n > 1) mpf[1] = 1; |
| 13 | 11 | } | |
| 14 | 3832 | CEXP void prime(u32 p) NE { mpf[p] = p; } | |
| 15 | 14978 | CEXP void coprime(u32 i, u32 j) NE { mpf[i * j] = j; } | |
| 16 | 9282 | CEXP void not_coprime(u32 i, u32 j) NE { mpf[i * j] = j; } | |
| 17 | }; | ||
| 18 | struct ls_phi { | ||
| 19 | vecu phi; | ||
| 20 | |||
| 21 | protected: | ||
| 22 | 598 | CEXPE ls_phi(u32 n) NE : phi(n) { | |
| 23 |
2/2✓ Branch 0 taken 279 times.
✓ Branch 1 taken 20 times.
|
299 | if (n > 1) phi[1] = 1; |
| 24 | 299 | } | |
| 25 | 1817974 | CEXP void prime(u32 p) NE { phi[p] = p - 1; } | |
| 26 | 10598834 | CEXP void coprime(u32 i, u32 j) NE { phi[i * j] = phi[i] * (j - 1); } | |
| 27 | 6118260 | CEXP void not_coprime(u32 i, u32 j) NE { phi[i * j] = phi[i] * j; } | |
| 28 | }; | ||
| 29 | struct ls_tau { | ||
| 30 | vecu tau; | ||
| 31 | |||
| 32 | protected: | ||
| 33 | vecu pc; | ||
| 34 | 44 | CEXPE ls_tau(u32 n) NE : tau(n), pc(n, 1) { | |
| 35 |
2/2✓ Branch 0 taken 9 times.
✓ Branch 1 taken 2 times.
|
11 | if (n > 1) tau[1] = 1; |
| 36 | 11 | } | |
| 37 | 3832 | CEXP void prime(u32 p) NE { tau[p] = 2; } | |
| 38 | 14978 | CEXP void coprime(u32 i, u32 j) NE { tau[i * j] = tau[i] * 2; } | |
| 39 | 9282 | CEXP void not_coprime(u32 i, u32 j) NE { tau[i * j] = tau[i] + tau[i] / (pc[i * j] = pc[i] + 1); } | |
| 40 | }; | ||
| 41 | struct ls_mu { | ||
| 42 | veci mu; | ||
| 43 | |||
| 44 | protected: | ||
| 45 | 66 | CEXPE ls_mu(u32 n) NE : mu(n) { | |
| 46 |
2/2✓ Branch 0 taken 31 times.
✓ Branch 1 taken 2 times.
|
33 | if (n > 1) mu[1] = 1; |
| 47 | 33 | } | |
| 48 | 7542414 | CEXP void prime(u32 p) NE { mu[p] = -1; } | |
| 49 | 67982331 | CEXP void coprime(u32 i, u32 j) NE { mu[i * j] = -mu[i]; } | |
| 50 | 37213956 | CEXP void not_coprime(u32, u32) NE {} | |
| 51 | }; | ||
| 52 | struct ls_sigma { | ||
| 53 | vecuu sigma; | ||
| 54 | |||
| 55 | protected: | ||
| 56 | vecuu pw; | ||
| 57 | 44 | CEXPE ls_sigma(u32 n) NE : sigma(n), pw(n) { | |
| 58 |
2/2✓ Branch 0 taken 9 times.
✓ Branch 1 taken 2 times.
|
11 | if (n > 1) sigma[1] = 1; |
| 59 | 11 | } | |
| 60 | 3832 | CEXP void prime(u32 p) NE { pw[p] = (u64)p * p, sigma[p] = p + 1; } | |
| 61 | 14978 | CEXP void coprime(u32 i, u32 j) NE { pw[i * j] = (u64)j * j, sigma[i * j] = sigma[i] * (j + 1); } | |
| 62 | 9282 | CEXP void not_coprime(u32 i, u32 j) NE { sigma[i * j] = sigma[i] * ((pw[i * j] = pw[i] * j) - 1) / (pw[i] - 1); } | |
| 63 | }; | ||
| 64 | |||
| 65 | } // namespace tifa_libs | ||
| 66 |