20vector<T>
lucy_dp(
long long n, vector<T> sumg, G g) {
21 assert(sumg.size() % 2 == 0);
22 long long m = sumg.size() / 2;
23 assert(m * m <= n && (m + 1) * (m + 1) > n);
25 for (
int i = 2; i <= m; i++) {
28 for (
int i = 2; i * i <= m; i++) {
32 for (
int j = i * i; j <= m; j += i) {
36 vector<long long> div(m + 1);
37 vector<T> sumgp = sumg;
38 for (
int i = 1; i <= m; i++) {
41 for (
int prime = 2; prime <= m; prime++) {
45 long long prime_squared = (
long long)prime * prime, iprime = prime;
46 for (
int i = 1; i <= m; i++, iprime += prime) {
47 if (div[i] < prime_squared) {
51 iprime <= m ? sumgp[2 * m - iprime] : sumgp[div[i] / prime - 1];
52 sumgp[2 * m - i] -= g(prime) * (div_val - sumgp[prime - 2]);
54 for (
int i = m; i >= prime_squared; i--) {
55 sumgp[i - 1] -= g(prime) * (sumgp[i / prime - 1] - sumgp[prime - 2]);
66 assert(sumfp.size() % 2 == 0);
67 long long m = sumfp.size() / 2;
68 assert(m * m <= n && (m + 1) * (m + 1) > n);
70 for (
int i = 2; i <= m; i++) {
73 for (
int i = 2; i * i <= m; i++) {
77 for (
int j = i * i; j <= m; j += i) {
81 vector<long long> div(m + 1);
82 vector<T> sumf = sumfp, _sumf = sumf;
83 for (
int i = 1; i <= m; i++) {
86 for (
int prime = m; prime >= 2; prime--) {
91 for (
long long prime_pow = prime; div[prime] >= prime_pow;
92 prime_pow *= prime, pow++) {
93 for (
int i = 1; i <= m; i++) {
94 long long divprime = div[i] / prime_pow;
95 if (divprime < prime) {
98 T div_val = i * prime_pow <= m ? sumf[2 * m - i * prime_pow]
101 f(prime, pow) * (div_val - sumfp[prime - 1]) + f(prime, pow + 1);
103 for (
int i = m; i >= 1; i--) {
104 long long divprime = i / prime_pow;
105 if (divprime < prime) {
108 _sumf[i - 1] += f(prime, pow) * (sumf[divprime - 1] - sumf[prime - 1]) +
112 long long prime_squared = (
long long)prime * prime;
114 prime_squared <= m ? prime_squared - 1 : 2 * m - n / prime_squared;
115 for (
int i = 2 * m - 1; i >= lim; i--) {
119 for (
int i = 0; i < 2 * m; i++) {
vector< T > lucy_dp(long long n, vector< T > sumg, G g)
Definition multiplicative_function.hpp:20