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)\) 的样子,呃

posted @ 2024-06-06 13:29  Nityacke  阅读(37)  评论(0)    收藏  举报