前缀素数个数的一点想法
前缀素数个数的一点想法
idea from pp_orange, 08/11/24
首先对于狄利克雷卷积,我们有一种视角是设 \(f(x) = \sum\limits_{i=1}^{\inf} a_{i}x^{\ln i}\),这样我们直接多项式卷积就可以干狄利克雷卷积干的事情,而且方便让多项式的性质和处理手段直接嫁接到狄利克雷卷积上来。我们约定 \(p_i\) 是第 \(i\) 个质数。
设 \(S(x) = \sum\limits_{i=1}^{\inf}x^{\ln p_i},~~~I(x) = \sum\limits_{i=1}^{\inf} x^{\ln i},~~~~P_n(x)=\sum\limits_{i=0}^{\inf}x^{i\ln p_n},~~~~\epsilon(x)=x^{\ln 0}\)
我们寻找一下这些函数之间的关系,我们希望用 \(I(x)\) 去表示 \(S(x)\)。
我们显然有:\(I(x) = \prod\limits_{i=1}^{\inf}P_i(x)\),
两边同时取 \(\ln\),得:
于是:
后面那一项都是平方以上的指数,所以数量很少(小于 \(O(\sqrt n)\)),暴力扣掉即可,于是问题转换为求解 \(\ln I(x)\)。考虑定义式:
zak 论文中的块筛卷积做到了 \(O(\sqrt n \log n \log \log n)\),而我们这个问题只需要 \(O(\log n)\) 次卷积,所以复杂度是 \(O(\sqrt n \log ^2 n \log \log n)\)。实际上进一步的,我们可以优化到 \(O(\sqrt n\log^{\frac{3}{2}}n\log \log n)\)。
我们类比古老多项式复合逆从 \(O(n^2\log n)\) 到 \(O(n^2+n\sqrt n \log n)\) 的优化路径,我们发现这个东西形式非常向复合逆,我们直接把 \((\epsilon(x)-I(x))^i\) 分解为 \((\epsilon(x)-I(x))^{ak+b}\) 的形式,其中 \(k\) 取 \(O(\sqrt {\log n})\) 级别,我们花 \(O(\sqrt n\log^{\frac{3}{2}} n\log \log n)\) 的时间把 \((\epsilon(x)-I(x))^{ak}\) 和 \((\epsilon(x)-I(x))^b\) 都处理出来,然后 \(O(\sqrt n \log n)\) 把他们组合点积到一起按照对应的系数加到一起即可。
最后的复杂度就定格在了 \(O(\sqrt n\log^{\frac{3}{2}} n\log \log n)\)。
实际上这个在素数相关问题上还是很有延拓性的,我们实际上还可以求前缀素数和、前缀素数平方和,只需要把原文中的 \(I(x)\) 换掉即可。