6.6 闲话
我们可以在 \(O(n\log \log n)\) 的(也许是 \(O(n)\)?)时间复杂度内对于 \(i\in [1,n]\) 的每一个 \(i\) 计算出 \(f(i)=i^i\)。
我们考虑线性筛的过程:
- 首先对于质数,我们快速幂暴力计算,时间复杂度 \(O(\frac n {\ln n}\log n)=O(n)\)。
- 否则我们一定可以把这个数 \(i\) 写成 \(p\times q\) 的形式,\(p\) 是 \(i\) 的最小质因数。
由于 \(i=p\times q\),所以:\(f(i)=f(p)^qf(q)^p\)。
由于我们发现 \(p\le \sqrt n\),所以我们对于 \(\le \sqrt n\) 的每个质数预处理光速幂,即可 \(O(1)\) 计算 \(f(p)^q\),这一部分时间复杂度 \(O(\frac {\sqrt n}{\ln n}\sqrt n)=O(\frac n {\ln n})\)。
然后我们考虑计算 \(f(q)^p\),我们不难发现,对于一个 \(q\),我们询问的只有 \(f(q)^{2},f(q)^{3},f(q)^5,f(q)^7\ldots\),而这个我们可以每次计算增量的贡献,由于增量最大只有 \(\ln \frac nq\),所以这里复杂度是 \(O(\frac {n/q}{\ln (n/q)}+\ln \frac n q)\)。
我们先计算:
\[\int_1^n\ln \frac n xdx=(x\log \frac n x+x)|_{x=n}=O(n)
\]
然后计算:
\[\begin{aligned}
\int \frac {n/x}{\ln(n/x)}dx=-n\log\log \frac n x
\end{aligned}
\]
看起来积分近似误差有点大,呃。
打表看出来好像大概是 \(O(1.5n\log\log n)\) 的样子,呃

浙公网安备 33010602011771号