码迷,mamicode.com
首页 > 其他好文 > 详细

杜教筛

时间:2017-12-29 21:02:20      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:过多   mat   map   搜索   class   复杂   处理   rac   题解   

杜教筛?

我不会什么狄利克雷卷积,但同我反演只用\(\sum_{d|n}\mu(d)=(n==1)\)这条式子一样,我觉得杜教筛也是相似的。

例题1:

\(\sum_{i=1}^{n}\mu(i)\)范围:\(n\le10^{10}\)

题解:

引入式子\(\sum_{d|n}\mu(d)==(n==1)\)

:这条以及后文引入的两条式子可在莫比乌斯反演那篇博文里看到证明

考虑\(\mu(n)\)\(\mu(n)=(n==1)-\sum_{d|n\&d<n}\mu(d)\)

那么将\(\mu(n)\)代入原式

\[\sum_{i=1}^n\mu(i)\]

\[=\sum_{i=1}^n((i==1)-\sum_{d|i\&d<i}\mu(d))\]

\[=1-\sum_{i=1}^n\sum_{d|i\&d<i}\mu(d)\]

那么,对于\(\mu(d)\)来说,它只有在\(d|i且d<i\)时才会被计算

换句话说,\(\mu(d)\)会在\(xd\le n\)时被计算上(\(x>1\)

那么我们枚举\(x\)

原式既等于

\[=1-\sum_{x=2}^n\sum_{xd<=n}\mu(d)\]

\[=1-\sum_{x=2}^n\sum_{d=1}^{\lfloor\frac{n}{x}\rfloor}\mu(d)\]

稍微换一下符号

\[=1-\sum_{x=2}^{n}\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\mu(i)\]

然后我们发现

woc右边那一块式子怎么那么熟悉(\(\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\mu(i)\)

就好像……,就好像最开始要求的那样

那么我们设最开始的为一个函数:

\[f(n)=\sum_{i=1}^n\mu(i)=1-\sum_{x=2}^{n}\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\mu(i)=1-\sum_{x=2}^nf(\lfloor\frac{n}{x}\rfloor)\]

那么,总共有根号不同的对于每个\(f(n)\)来说,我们最多要求根号级别的\(f(\lfloor\frac{n}{x}\rfloor)\)

预处理前\(n^{\frac{2}{3}}\)\(f\),然后记忆化搜索即可(后面的f的函数值用哈希表来存(或者map,不过多一个log))

例题2:

\(\sum_{i=1}^{n}phi(i)\)范围:\(n\le10^{10}\)

题解:

引入:\[\sum_{d|n}phi(d)=n\]

\[phi(n)=n-\sum_{d|n\&d<n}phi(d)\]

原式=\[\sum_{i=1}^n(i-\sum_{d|ni\&d<i}phi(i))\]

枚举dx对数

\[\frac{n\times(n+1)}{2}-\sum_{x=2}^n\sum_{dx<=n}phi(d)\]

\[=\frac{n\times(n+1)}{2}-\sum_{x=2}^n\sum_{d=1}^{\lfloor\frac{n}{x}\rfloor}phi(d)\]

\[=\frac{n\times(n+1)}{2}-\sum_{x=2}^n\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}phi(i)\]

设原式=\(f(x)\)

\[f(n)=\frac{n\times(n+1)}{2}-\sum_{x=2}^n\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}phi(i)=\frac{n\times(n+1)}{2}-\sum_{x=2}^nf(\lfloor\frac{n}{x}\rfloor)\]

记忆化搜索即可

复杂度分析:不会,大概调一下预处理的参数,别的博客上面证明是\(O(n^{\frac{2}{3}})\)左右。

核心:乱推式子+记忆化搜索

杜教筛

标签:过多   mat   map   搜索   class   复杂   处理   rac   题解   

原文地址:https://www.cnblogs.com/Star-dust/p/8146146.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!