杜教筛
作者:互联网
- 杜教筛是用来在非线性时间内求积性函数的前缀和
前置知识
-
积性函数(莫比乌斯函数,欧拉函数。。。)
-
狄利克雷卷积
杜教筛
-
假设当前要求积性函数的 \(\sum_{i=1}^n f_i\)
-
那么我们找一个合适的另一个积性函数 \(g\)
-
那么 \(g(1)S(n)=\sum_{i=1}^ng(i)S(\lfloor\frac{n}{i}\rfloor)-\sum_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\)
-
那么 \(g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\)
-
最后这个式子可以当作一个 公式
-
所以现在就需要找到一个合适的积性函数 \(g\) 使得可以快速的求出这两个部分,后面的部分可以用数论分块优化,前面的部分一般可以 \(O(1)\) 算
-
那么一般的复杂度就是 \(O(n^{\frac{3}{4}})\) ,如果预处理出长度为 \(n^{\frac{2}{3}}\) 的前缀和,那么可以证明复杂度为 \(O(n^{\frac{2}{3}})\)
-
还有的优化就是在递归的时候记忆化
-
首先转换成 \(\sum_{x=1}^nx^3\sum_{d=1}^{\lfloor\frac{n}{x}\rfloor}\mu(d)d^2g(\frac{n}{dx}),g(x)=(\frac{(1+x)x}{2})^2\)
-
这里有个套路,设 \(T=dx\) ,把 \(g\) 提前
-
因为我们需要构造出我们熟悉的数论函数,所以这个和 \(\mu\) 函数连在一起的分块结构必须分离
-
\(\sum_{T=1}^n g(\lfloor\frac{n}{T}\rfloor)\times T^2\sum_{d|T}\mu(T)(\frac{T}{d})\)
-
将后面的一坨看成 \(f(x)\) ,那么就是 \(\sum_{T=1}^n g(..)\times f(T)\)
-
前面的部分可以用数论分块优化,后面的 \(f\) 考虑用非线性的杜教筛
-
对于 \(f(x)=x^2\sum_{d|x}\mu(x)(\frac{x}{d})=x^2\varphi(x)\)
-
考虑找一个积性函数,最好将 \(\varphi\) 变成 \(\operatorname{id}\) ,所以需要先将 \(x^2\) 消掉,设 \(h(x)=x^2\)
-
那么 \((f\cdot h)(x)=x^2\sum_{d|x}\varphi(d)=x^3\)
-
那么就可以直接套杜教筛,\(S(n)=\sum_{i=1}^ni^3-\sum_{i=2}^ni^2S(\lfloor\frac{n}{i}\rfloor)\)
-
\(\sum_{i=1}^n i^3=\frac{n^2(n+1)^2}{4}\) ,\(\sum_{i=1}^n i^2=\frac{n(n+1)(2n+1)}{6}\) ,那么整体的复杂度就可以做到 \(n^{\frac{2}{3}}\)
-
虽然外层套了层数论分块,但是我们记忆化了,最后只会有 \(\sqrt n\) 个点值会被算到,所以整体的复杂度在里面的杜教筛,所以可以看成 \(O(\sqrt n + n^\frac{2}{3})\)
标签:lfloor,frac,函数,sum,rfloor,杜教 来源: https://www.cnblogs.com/kzos/p/16341338.html