定义(pi_k(n))为质数的(k)次幂前缀和函数,即(pi_k(n)=sum_{1leq ileq pi(n)}p^k)。特别地,(pi_0(n)=pi(n)),为质数计数函数。求(pi_k(n))。
解法
(若无特殊说明,下文中单独出现的(p)、(q)均为质数)
定义
-
记(delta(x))为(x)的最小质因子,(gamma(x))为(x)的最大质因子。
-
记(cnt(x))为(x)的质因子个数。
-
(S_k(n))为自然数幂和函数。(S_k(n)=sum_{1leq ileq n}i^k)。
-
(phi_k)为部分筛函数。(phi_k(n,a)=sum_{substack{1leq xleq n\ delta(x)> p_a}}x^k)。
-
(P_{s,k}(n,a)=sum_{substack{1leq xleq n\ delta(x)> p_a\ cnt(x)=s}}x^k)。
那么
[phi_k(n,a)=sum_{sgeq 0}P_{s,k}(n,a)
]
考虑素数(B=p_a),当(n^frac{1}{3}leq Bleq n^frac{1}{2})时,有
[phi_k(n,a)=P_{0,k}(n,a)+P_{1,k}(n,a)+P_{2,k}(n,a)=1+pi_k(n)-pi_k(p_a)+P_{2,k}(n,a)
]
于是
[pi_k(n)=phi_k(n)-P_{2,k}(n,a)+pi_k(p_a)-1
]
故只需要分别计算(pi_k(p_a))、(P_{2,k}(n,a))、(phi_k(n,a))即可。
对于(pi_k(p_a))。线性筛即可。时间复杂度(O(B))。
对于(P_{2,k}(n,a))。根据定义有
[P_{2,k}(n,a)=sum_{substack{p_a< pleq q\ pqleq n}}(pq)^k
]
注意到(B< pleq q< leftlfloorfrac{n}{B}
ight
floor),于是线性筛预处理,然后枚举(p)计算所有可行的(q)的贡献,为
[P_{2,k}(n,a)=sum_{p_a< pleq sqrt{n}}p^kleft(pi_kleft(leftlfloorfrac{n}{p}
ight
floor
ight)-pi_k(p-1)
ight)
]
时间复杂度(O(frac{n}{B}))。
对于(phi_k(n,a))。根据容斥,容易得到递推式
[phi_k(n,a)=phi_k(n,a-1)-p_a^kphileft(leftlfloorfrac{n}{p_a}
ight
floor,a-1
ight)
]
边界条件为
[phi_k(n,0)=S_k(n)
]
考虑DFS计算该式。
若每次都递推到边界,有
[phi_k(n,a)=sum_{gamma(x)leq p_a}mu(x)x^kS_kleft(leftlfloorfrac{n}{x}
ight
floor
ight)
]
复杂度难以接受,考虑剪枝。
加入(x> B)时停止递归的剪枝,有
[phi_k(n,a)=sum_{xleq B}mu(n)x^kS_kleft(leftlfloorfrac{n}{x}
ight
floor
ight)+sum_{frac{x}{delta(x)}leq B< x}mu(x)x^kphi_kleft(leftlfloorfrac{n}{x}
ight
floor,pi(delta(x))-1
ight)
]
令
[mathcal{S_0}=sum_{xleq B}mu(n)x^kS_kleft(leftlfloorfrac{n}{x}
ight
floor
ight)
]
[mathcal{S}=sum_{frac{x}{delta(x)}leq B< x}mu(x)x^kphi_kleft(leftlfloorfrac{n}{x}
ight
floor,pi(delta(x))-1
ight)
]
那么
[phi_k(n,a)=mathcal{S_0}+mathcal{S}
]
对于(mathcal{S_0}),线性筛预处理后(O(B))计算即可。
对于
[mathcal{S}=-sum_{pleq B}sum_{substack{delta(x)> p\ xleq B< xp}}mu(x)p^kx^kphi_kleft(leftlfloorfrac{n}{xp}
ight
floor,pi(p)-1
ight)
]
分块计算。
令
[mathcal{S_1}=-sum_{n^frac{1}{3}< pleq B}sum_{substack{delta(x)> p\ xleq B< xp}}mu(x)p^kx^kphi_kleft(leftlfloorfrac{n}{xp}
ight
floor,pi(p)-1
ight)
]
[mathcal{S_2}=-sum_{n^frac{1}{4}< pleq n^frac{1}{3}}sum_{substack{delta(x)> p\ xleq B< xp}}mu(x)p^kx^kphi_kleft(leftlfloorfrac{n}{xp}
ight
floor,pi(p)-1
ight)
]
[mathcal{S_3}=-sum_{pleq n^frac{1}{4}}sum_{substack{delta(x)> p\ xleq B< xp}}mu(x)p^kx^kphi_kleft(leftlfloorfrac{n}{xp}
ight
floor,pi(p)-1
ight)
]
那么
[mathcal{S}=mathcal{S_1}+mathcal{S_2}+mathcal{S_3}
]
对于(mathcal{S_1},mathcal{S_2}),注意到(delta(x)> p> n^frac{1}{4})且(xleq Bleq n^frac{1}{2})。于是(x)只能为质数。
于是
[mathcal{S_1}=sum_{n^frac{1}{3}< pleq B}sum_{p< qleq B}p^kq^kphi_kleft(leftlfloorfrac{n}{pq}
ight
floor,pi(p)-1
ight)
]
[mathcal{S_2}=sum_{n^frac{1}{4}< pleq n^frac{1}{3}}sum_{p< qleq B}p^kq^kphi_kleft(leftlfloorfrac{n}{pq}
ight
floor,pi(p)-1
ight)
]
对于(mathcal{S_1})。由于(leftlfloorfrac{n}{pq}
ight
floor< n^frac{1}{3}< p),所以(phi_kleft(leftlfloorfrac{n}{pq}
ight
floor,pi(p)-1
ight)=1)
于是
[mathcal{S_1}=sum_{n^frac{1}{3}< pleq B}sum_{p< qleq B}p^kq^k=sum_{n^frac{1}{3}< pleq B}p^k(pi_k(B)-pi_k(p))
]
时间复杂度(O(B))。
对于(mathcal{S_2}),考虑分成两个部分计算。令
[mathcal{U}=sum_{n^frac{1}{4}< pleq n^frac{1}{3}}sum_{substack{p< qleq B\ q> frac{n}{p^2}}}p^kq^kphi_kleft(leftlfloorfrac{n}{pq}
ight
floor,pi(p)-1
ight)
]
[mathcal{V}=sum_{n^frac{1}{4}< pleq n^frac{1}{3}}sum_{substack{p< qleq B\ qleq frac{n}{p^2}}}p^kq^kphi_kleft(leftlfloorfrac{n}{pq}
ight
floor,pi(p)-1
ight)
]
那么(mathcal{S_2}=mathcal{U}+mathcal{V})。
对于(mathcal{U}),因为(q> frac{n}{p^2}),所以有(p> sqrt{frac{n}{q}}geq sqrt{frac{n}{B}})。同时,由于(leftlfloorfrac{n}{pq}
ight
floor<p),所以(phi_kleft(leftlfloorfrac{n}{pq}
ight
floor,pi(p)-1
ight)=1)。
于是
[mathcal{U}=sum_{sqrt{frac{n}{B}}< pleq n^frac{1}{3}}sum_{substack{p< qleq B\ q> frac{n}{p^2}}}p^kq^k=sum_{sqrt{frac{n}{B}}< pleq n^frac{1}{3}}p^kleft(pi_k(B)-pi_kleft(minleft{p,leftlfloorfrac{n}{p^2}
ight
floor
ight}
ight)
ight)
]
时间复杂度(O(B))。
对于(mathcal{V}),我们有(pleq frac{n}{pq}< sqrt{n}< p^2),所以(phi_kleft(leftlfloorfrac{n}{pq}
ight
floor,pi(p)-1
ight)=1+pi_kleft(leftlfloorfrac{n}{pq}
ight
floor
ight)-pi_k(p)+p^k)。
于是把(mathcal{V})分成两个部分计算。令
[mathcal{V_1}=sum_{n^frac{1}{4}< pleq n^frac{1}{3}}p^k(1-pi_k(p)+p^k)sum_{substack{p< qleq B\ qleq frac{n}{p^2}}}q^k
]
[mathcal{V_2}=sum_{n^frac{1}{4}< pleq n^frac{1}{3}}p^ksum_{substack{p< qleq B\ qleq frac{n}{p^2}}}q^kpi_kleft(leftlfloorfrac{n}{pq}
ight
floor
ight)
]
那么(mathcal{V}=mathcal{V_1}+mathcal{V_2})。
对于(mathcal{V_1}),直接枚举(p)计算即可。
对于(mathcal{V_2}),用类似数论分块的方法计算。枚举(p),对于所有(pi_kleft(leftlfloorfrac{n}{pq}
ight
floor
ight))相同的(q)一起统计贡献,可以证明最多只有(pileft(leftlfloorfrac{n}{p^2}
ight
floor
ight)),个状态。于是时间复杂度为(Oleft(frac{n^frac{2}{3}}{log n}
ight))。
对于(mathcal{S_3}),枚举(p),用树状数组统计其对所有有用的(phi_k)的贡献。时间复杂度为(Oleft(frac{n}{B}log n
ight))。
时间复杂度
取(B=O(n^frac{1}{3}log^2 n))时总复杂度达到最优,为(Oleft(frac{n^frac{2}{3}}{log n}
ight))。
(将(mathcal{V_2})分成5个部分计算可进一步将时间复杂度优化至(Oleft(frac{n^frac{2}{3}}{log^2 n}
ight)),在此不过多叙述)。
(实际上由于常数原因,在(nleq 10^{11})范围内跑得不如(Oleft(frac{n^frac{3}{4}}{log n}
ight))的递推做法或(O(n^frac{2}{3}))的树状数组优化做法快)。
代码咕咕咕。
参考文献: