Loading

杜教筛

今天被杜教筛折磨得有点难受,写一个笔记

前置知识

常见积性函数

主要是为了找到方便求的数论函数

分别有

  • 常见积性函数:\(\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})} \]

  • 常见卷积性质:
    1. \(\varphi*I=id\)
    1. \(\mu*I=\epsilon\)
    1. \(\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)\)都可以快速算出,也就是预处理这个的复杂度不能大于杜教筛的复杂度

posted @ 2020-07-25 16:37  zzqDeco  阅读(106)  评论(0编辑  收藏  举报