min_25筛
设有积性函数 f ( x ) f(x) f(x),满足 f ( P i ) f(P_i) f(Pi)是多项式,且能够快速计算出 f ( P i k ) f(P_i^k) f(Pik)。求其前缀和。
一个函数
令 m i n p ( x ) minp(x) minp(x)表示 x x x的最小质因子。令 P P P为质数集,其中第 1 1 1个元素为 2 2 2。设 g ( n , j ) = ∑ i = 1 n f ( i ) [ i ∈ P ∨ m i n p ( i ) > P j ] g(n,j)=\sum_{i=1}^nf(i)[i\in P\lor minp(i)>P_j] g(n,j)=∑i=1nf(i)[i∈P∨minp(i)>Pj]。
考虑从
g
(
n
,
j
−
1
)
g(n,j-1)
g(n,j−1)推到
g
(
n
,
j
)
g(n,j)
g(n,j)。这个过程相当于删去那些最小质因数为
P
j
P_j
Pj的合数。也就是说,这些数除以
P
j
P_j
Pj后的最小质因数还是大于
P
j
−
1
P_{j-1}
Pj−1的。那要删去的数的答案就是
f
(
P
j
)
⋅
g
(
n
P
j
,
j
−
1
)
f(P_j)\cdot g(\frac{n}{P_j},j-1)
f(Pj)⋅g(Pjn,j−1)吗?发现这时还多删了除以
P
j
P_j
Pj后比
P
j
P_j
Pj小的质数的答案,因此把这部分补回去。则转移就是
g
(
n
,
j
)
=
g
(
n
,
j
−
1
)
−
f
(
P
j
)
⋅
[
g
(
n
P
j
,
j
−
1
)
−
g
(
P
j
−
1
,
j
−
1
)
]
g(n,j)=g(n,j-1)-f(P_j)\cdot [g(\frac{n}{P_j},j-1)-g(P_j-1,j-1)]
g(n,j)=g(n,j−1)−f(Pj)⋅[g(Pjn,j−1)−g(Pj−1,j−1)]
这个是没有特判各种情况时的转移。首先,若
P
j
2
>
n
P_j^2>n
Pj2>n,则显然这次什么也删不了,即
g
(
n
,
j
)
=
g
(
n
,
j
−
1
)
g(n,j)=g(n,j-1)
g(n,j)=g(n,j−1)。另外还有边界,即
g
(
P
j
,
j
)
=
∑
i
=
1
j
f
(
P
j
)
g(P_j,j)=\sum_{i=1}^jf(P_j)
g(Pj,j)=∑i=1jf(Pj)。
如果我们要计算 g ( n , m ) g(n,m) g(n,m),则我们只需要对 n \sqrt n n内的质数计算即可。该部分的复杂度为 O ( n 3 4 log n ) O(\frac{n^{\frac{3}{4}}}{\log n}) O(lognn43)。
另一个函数
设 S ( n , j ) = ∑ i = 1 n f ( i ) [ m i n p ( i ) ≥ P j ] S(n,j)=\sum_{i=1}^nf(i)[minp(i)\ge P_j] S(n,j)=∑i=1nf(i)[minp(i)≥Pj]。则 f f f的前缀和就是 S ( n , 1 ) + f ( 1 ) S(n,1)+f(1) S(n,1)+f(1)。
先预处理要求范围内的
g
g
g。考虑如何转移
S
S
S,将答案为质数的答案和合数的答案,其中质数直接计算,合数递归计算。质数的答案可以由
g
g
g算出,是
g
(
n
,
j
)
−
∑
i
=
1
j
−
1
f
(
P
i
)
g(n,j)-\sum_{i=1}^{j-1}f(P_i)
g(n,j)−∑i=1j−1f(Pi)。对于合数,枚举其最小质因子及其出现次数。转移为
S
(
n
,
j
)
=
g
(
n
,
j
)
−
∑
i
=
1
j
−
1
f
(
P
i
)
+
∑
k
=
j
P
k
2
≤
n
∑
l
=
1
P
k
l
+
1
≤
n
f
(
P
k
l
)
⋅
S
(
n
P
k
l
,
k
+
1
)
+
f
(
P
k
l
+
1
)
S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\le n}\sum_{l=1}^{P_k^{l+1}\le n}f(P_k^l)\cdot S(\frac{n}{P_k^l},k+1)+f(P_k^{l+1})
S(n,j)=g(n,j)−i=1∑j−1f(Pi)+k=j∑Pk2≤nl=1∑Pkl+1≤nf(Pkl)⋅S(Pkln,k+1)+f(Pkl+1)
总复杂度为
O
(
n
3
4
log
n
)
O(\frac{n^{\frac{3}{4}}}{\log n})
O(lognn43)。