各种反演和筛的总结
可以说是从零开始学了。
主要记录对这些东西的理解过程。
希望有发现错误的大佬能及时指出。
反演
对于两个函数\(f(x)\)和\(g(x)\),我们有从\(f\)到\(g\)的关系式。
\(g(n)=\sum^{n}_{i=0}A_{n,i}f(i)\)
其中\(A_{n,i}\)表示某种类型的计算方式,比如说组合关系或者倍数关系之类的。
那么很显然直接代入此式就会很方便\(f->g\)的推导。
而如果我们要求\(g->f\)的推导怎么办。
于是我们引入了反演
很显然并不是所有式子都可以有优秀的反演方法。
二项式反演
二项式相关,此时\(A_{n,i}\)是一个组合数的形式。
用更常见的形式:
\(g(n)=\sum_{i=0}^{n}{n\choose i}f(i)\)
\(f(n)=\sum_{i=0}^{n}(-1)^{n-i}{n\choose i}g(i)\)或者换下下标\(f(n)=\sum_{i=0}^{n}(-1)^{i}{n\choose i}g(n-i)\)
我们想想系数为什么是正负一。
我们考虑\(f(k)\)内的每一个贡献,它在\(i<k\)的时候会被计算的次数为:
\(\sum^{k-1}_{i=0}(-1)^{i}{k\choose i}\)
具体一点的意义,把以上式子用一个实例表述:
一共有\(n\)个人,每个人都有自己的座位,现在让他们都不坐在自己的座位上,求方案数。(错排问题)
那么所求就是\(f(n)\)表示恰好有\(n\)个人坐不到自己的座位上的方案数
而\(g(n)\)表示所有坐座位的方案,那么\(g(n)=n!\) 表示这\(n\)个人随便坐。
\(g(n)=\sum_{i=0}^{n}{n\choose i}f(n-i)\)表示枚举\(i\)个人坐到自己的座位,再组合数选出这些人,然后其他人错排。
化一下下标\(g(n)=\sum_{i=0}^{n}{n\choose i}f(i)\),是不是熟悉的式子了。
回到上面实例前的那个式子
\(f(k)\)中的贡献相当于是恰好有\(k\)个人坐不到自己座位的方案
考虑对于每一种方案,这里相当于从\(0\)到\(n\)枚举坐到自己座位上的人,所以在\(i<k\)的时候同样会计算到这些方案,而计算到的次数为:\(\sum^{k-1}_{i=0}(-1)^{i}{k\choose i}\)
这个自己理解一下。
把上面那个式子拆开变成 \(\sum^{k}_{i=0}(-1)^{i}{k\choose i}-(-1)^{k}{k\choose k}\)
\(k!=0\),所以左边根据组合数的性质就是\(0\),而右边剩下了\(-(-1)^k\)
也就是说多算了\(-(-1)^k\)遍,我们加回来就好了。
其实上面那个就是容斥。
或者说整个二项式反演都是容斥。
或者说这些反演都用到了容斥。
总是有一种这些都是别人构造好的东西的感觉。
反演的实质去\(yyb\)那看?或者百度也行,我记得看到了一篇不错的。
初学呢哪那么厉害。
莫比乌斯反演
这个时候的\(A_{n,i}\)不一样了:
\(g(n)=\sum_{d|n} f(d)\)
相当于所有\(n\)的因数的\(f\)加起来,那这个怎么做啊。
先放式子:\(f(n)=\sum_{d|n}\mu(\frac{n}{d})g(d)\)
这种情况显然复杂一些,\(\mu\)在这里相当于构造了一个函数,为了满足这个反演。
对于初学者而言,我们显然可以通过打表的优秀方式发现这个\(\mu\)的规律:
\(\mu(1)=1\)
根据唯一分解定理将一个数\(n\)分解为\(\prod_{i=1}^{t}p_i^{a_i}\) ,\(t\)为质因子个数
那么若存在\(a_i>1\)则\(\mu(n)=0\),否则\(\mu(n)=(-1)^t\)
多手玩一下,就能更深刻地理解其中的关系。
另外我们把式子变个形,可以得到:
\(g(n)=\sum_{n|d}f(d)\),则有
\(f(n)=\sum_{n|d}\mu(\frac{d}{n})g(d)\)
这个要有个统一的上界,两式本质相同。
作为初学者,先得会用这些东西。
要知道在哪用以及怎么用。
看到题列出式子一定要尝试向这些东西上靠,在做多了题之后就会理解了。