各种反演和筛的总结
可以说是从零开始学了。
主要记录对这些东西的理解过程。
希望有发现错误的大佬能及时指出。
在更了在更了(——1.31)
大概咕掉了,有时间的话有可能会开一篇新的。(——3.12)
反演
对于两个函数(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}{nchoose i}f(i))
(f(n)=sum_{i=0}^{n}(-1)^{n-i}{nchoose i}g(i))或者换下下标(f(n)=sum_{i=0}^{n}(-1)^{i}{nchoose i}g(n-i))
我们想想系数为什么是正负一。
我们考虑(f(k))内的每一个贡献,它在(i<k)的时候会被计算的次数为:
(sum^{k-1}_{i=0}(-1)^{i}{kchoose i})
具体一点的意义,把以上式子用一个实例表述:
一共有(n)个人,每个人都有自己的座位,现在让他们都不坐在自己的座位上,求方案数。(错排问题)
那么所求就是(f(n))表示恰好有(n)个人坐不到自己的座位上的方案数
而(g(n))表示所有坐座位的方案,那么(g(n)=n!) 表示这(n)个人随便坐。
(g(n)=sum_{i=0}^{n}{nchoose i}f(n-i))表示枚举(i)个人坐到自己的座位,再组合数选出这些人,然后其他人错排。
化一下下标(g(n)=sum_{i=0}^{n}{nchoose i}f(i)),是不是熟悉的式子了。
回到上面实例前的那个式子
(f(k))中的贡献相当于是恰好有(k)个人坐不到自己座位的方案
考虑对于每一种方案,这里相当于从(0)到(n)枚举坐到自己座位上的人,所以在(i<k)的时候同样会计算到这些方案,而计算到的次数为:(sum^{k-1}_{i=0}(-1)^{i}{kchoose i})
这个自己理解一下。
把上面那个式子拆开变成 (sum^{k}_{i=0}(-1)^{i}{kchoose i}-(-1)^{k}{kchoose 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))
这个要有个统一的上界,两式本质相同。
作为初学者,先得会用这些东西。
要知道在哪用以及怎么用。
看到题列出式子一定要尝试向这些东西上靠,在做多了题之后就会理解了。