杜教筛
今天被杜教筛折磨得有点难受,写一个笔记
前置知识
常见积性函数
主要是为了找到方便求的数论函数
分别有
-
常见积性函数:\(\varphi\),\(\mu\),\(\sigma\),\(d\)
-
常见的完全积性函数:\(\epsilon\),\(I\),\(id\)
其中\(ϵ(n)=[n=1]\),\(I(n)=1\),\(id(n)=n\)
狄利克雷卷积
对于两个数论函数\(f\),\(g\),狄利克雷卷积为
\[(f*g)(n)=\sum_{d|n}{f(d)g(\frac{n}{d})}
\]
- 常见卷积性质:
-
- \(\varphi*I=id\)
-
- \(\mu*I=\epsilon\)
-
- \(\mu*id=\varphi\)
推导过程
设我们要求的函数\(f\)的和\(\sum^{n}_{i=1}{f(i)}=S(n)\)
找到一个函数\(g\)与函数\(f\)相卷
\[\sum^{n}_{i=1}{(f*g)(i)}\\
=\sum^{n}_{i=1}\sum_{d|i}{f(d)g(\frac{i}{d})}\\
=\sum^{n}_{d=1}{g(d)}\sum^{\lfloor\frac{n}{d}\rfloor}_{i=1}{f[i]}\\
=\sum^{n}_{d=1}{g(d)S(\lfloor\frac{n}{d}\rfloor)}
\]
导出这个过后,我们转化一下
\[\sum^{n}_{i=1}{(f*g)(i)}=\sum^{n}_{d=1}{g(d)S(\lfloor\frac{n}{d}\rfloor)}\\
\sum^{n}_{i=1}{(f*g)(i)}={g(1)S(n)}+\sum^{n}_{d=2}{g(d)S(\lfloor\frac{n}{d}\rfloor)}
\]
我们要求的东西是\(S\),而由上面的可以知道,只要知道某些比\(n\)小的\(S\)就可以推出\(S(n)\)
显然我们后面的可以用数论分块做到类根号
不过,这里需要\((f*g)(i)\)和\(g(i)\)都可以快速算出,也就是预处理这个的复杂度不能大于杜教筛的复杂度