关于欧拉函数

学术版

@[rhn7](/user/760998) 杜教筛 + 整除分块,可以做到 $\Theta(n^{2/3})$。
by 飞雨烟雁 @ 2024-04-12 22:20:07


@[rhn7](/user/760998) 整除分块之后暴力单点求 $\varphi$ 就是 $O(n^{\frac{3}{4}})$ 的吧
by rui_er @ 2024-04-12 22:20:28


@[飞雨烟雁](/user/375984) 大佬能说得具体一点吗,没学过杜教筛,只听说能求 $\sum_{i=1}^{n}\varphi(i)$,怎么求 $\sum_{i=1}^{n}\varphi(\frac{n}{i})$
by rhn7 @ 2024-04-12 22:26:49


@[rhn7](/user/760998) 用不着杜教筛,预处理一部分应该也能 $O(n^{\frac{2}{3}})$
by rui_er @ 2024-04-12 22:27:21


@[rui_er](/user/122461) 套上整除分块后复杂度不变吧,因为他会复用很多东西
by Rain_chr @ 2024-04-12 22:28:04


@[rui_er](/user/122461) 啊,怎么预处理
by rhn7 @ 2024-04-12 22:28:30


@[rui_er](/user/122461) @[rhn7](/user/760998) 想错了,用不了杜教筛,预处理前 $B$ 个 $\varphi(k)$,对于大于 $B$ 的 $\varphi(k)$,我们可以在 $\Theta(\sqrt k)$ 时间内求出。 时间复杂度为: $$B+\sum_{k=1}^{n/B}\sqrt {n/k}\approx B+n/\sqrt B$$ 取 $B=\Theta(n^{2/3})$ 即得 $\Theta(n^{2/3})$ 的做法。
by 飞雨烟雁 @ 2024-04-12 22:32:31


@[rhn7](/user/760998) <https://www.luogu.com.cn/paste/2swwkpf0> sb 洛谷告诉我未按规范排版代码,我不知道为什么。
by rui_er @ 2024-04-12 22:35:04


@[飞雨烟雁](/user/375984) 谢谢!
by rhn7 @ 2024-04-12 22:36:24


整除分块 + 暴力单点求 $\varphi$ 可做到 $O(n^{3/4})$。 在此基础上可作优化: 取阈值 $B=n^{2/3}\log^{-1/2}n.$ 对于 $n/i\le B$ 的部分线性筛 + 整除分块计算。 对于 $n/i>B$ 即 $i<n/B$ 的部分,考虑通过枚举根号级别以内的质数来分解每个 $n/i$,从而完成计算。 复杂度为 $\displaystyle O\left(B+\sum_{p^2\le B}\dfrac nB+\sum_{B<p^2\le n}\dfrac n{p^2}\right)=O(n^{2/3}\log^{-1/2}n).$
by XeCtera @ 2024-04-12 22:40:00


| 下一页