杜教筛

对于一般的欧拉线性筛,\(O(n)\)确实很优秀,但有些毒瘤题,数据范围硬是达到了\(1e8\)以上

对于这种情况,就要用到杜教筛了

套路式:

有积性函数\(h\)\(g\),且\(h=f*g\),求 \(\sum\limits_{i=1}^n f(i)\)

\(S(n)=\sum\limits_{i=1}^n f(i)\)

\(\sum\limits_{i=1}^n h(i)=\sum\limits_{i=1}^n \sum\limits_{d|n} g(d)f(\dfrac{i}{d})\)

\(~~~~~~~~~~~=\sum\limits_{d=1}^n g(d) \sum\limits_{i=1}^{\left\lfloor\dfrac{n}{d}\right\rfloor}f(i)\)

\(\therefore \sum\limits_{i=1}^n h(i)=\sum\limits_{d=1}^n g(d)S(\left\lfloor\dfrac{n}{d}\right\rfloor)\)

\(~~~~~~~~~~~~~~=g(1)S(n)+\sum\limits_{d=2}^n g(d)S(\left\lfloor\dfrac{n}{d}\right\rfloor)\)

\(\therefore g(1)S(n)=\sum\limits_{i=1}^n h(i)-\sum\limits_{d=2}^n g(d)S(\left\lfloor\dfrac{n}{d}\right\rfloor)\)

例题:

来看一个式子\(S(n)=\sum\limits_{i=1}^n \mu(i)\),则在这里面\(f=\mu\)

\(g(1)S(n)=\sum\limits_{i=1}^n h(i)-\sum\limits_{d=2}^n g(d)S(\left\lfloor\dfrac{n}{d}\right\rfloor)\)再看这个式子,我们找一个积性函数替换\(g\),使得原式计算更简单

\(I(1)S(n)=\sum\limits_{i=1}^n \epsilon(i)-\sum\limits_{d=2}^n I(d)S(\left\lfloor\dfrac{n}{d}\right\rfloor) \Longrightarrow S(n)=1-\sum\limits_{d=2}^n S(\left\lfloor\dfrac{n}{d}\right\rfloor)\)

整除分块就好了

毒瘤的出题人才不会让你这么简单看出来:\(S(n)=\sum\limits_{i=1}^ni\cdot \varphi(i)\)

一般这个时候带进卷积会更易观察:\(\sum\limits_{d|n}(d\cdot\varphi(d))\cdot g(\frac{n}{d})\)

\(g\)换成\(id\)根据欧拉函数的性质就容易消掉了

\[\sum_{d|n}(d\cdot\varphi(d))\cdot \frac{n}{d}=\sum_{d|n}n\cdot\varphi(d)\\\to=n\sum_{d|n}\varphi(d)=n^2 \]

最终变式:$$S(n)=\sum_{i=1}{n}i2-\sum_{d=2}^{n}d\cdot S(\lfloor\frac{n}{d}\rfloor)$$

posted @ 2019-01-30 09:34  y2823774827y  阅读(151)  评论(0编辑  收藏  举报