<!DOCTYPE html>
逆元求法
整除分块
卡特兰数
逆元定义:已知正整数,,求使得的
求1到n模p(p为质数且p>n)意义下的逆元
直接对于每一个都求一次
设
单个求:
优化:
有a的逆元为,b的逆元为,的逆元为
线性筛求解
设表示k的逆元
设
首先求逆元
有
之后倒着递推求出到的逆元
又有
再次递推求即可
问题:求,
(当然不是只能在这个式子上应用,但它的确是最经常应用到整除分块的式子,没有之一)并将时间复杂度从降到。
整除分块能实现基于这样一个事实:的取值总共不会超过种。为什么呢,我们来证明一下:
当时:
我们需要证明:
我们设,那么就有。根据除法的性质,,而又因为,所以,所以。
如果,那么就可以表示为(),即。而我们又知道。所以,即等式两边矛盾。所以由反证法我们就得到了。因此,在此情况下的取值个数就等于的取值数,即种。
当时:
这个不用怎么说了吧……都已经是小于的了,总取值数当然不超过啊。
所以,两类加起来就是种了。
既然证玩了这个结论,我们就可以考虑这样一个思路:因为的取值数为(那个是常数,可以忽略),那么只要求出它取每一种值时的最大值和最小值是多少,最终求和的时候用前缀和预处理算一下每一段的值是多少,加起来就可以了。
那么接下来,我们又需要证明一个结论了:
如果已知正整数(),则使的最大整数的值就是。
证明:
我们同样分类讨论一下。
当时:
我们设,那么就有。根据除法的性质,,而又因为,所以,所以。而的值就是。
那么,就会有。在此基础上,让我们再证明一个结论:。我们令,则。又因为而,所以,所以。因为且,所以我们可以得出:。所以:。又因为,所以必须为。所以就证完了。而又由我们上面证的结论:的取值总共不会超过种可以知道当的时候,所有的值都不相同,即。所以,得证了。
当时:
我们设,那么就有。根据除法的性质,。而的值就是。
那么,就会有。而我们现在要证明的,就是。看上去很难证,但是我们注意到必须符合且只需要符合的两个条件:。那么,如果我们需要证明,那么就只需要说明。看到你想到了什么?
聪明的读者一定已经想到了,因为这个(讲了这么多这个不可能不会自行理解吧),所以这个结论在上面讨论的时候已经证过了。所以,得证啦!
综合上面两个结论,我们便可以得出整除分块的思路了:
令
对于当前的求得,设为
通过前缀和或公式(例如等差数列公式)求得函数(中的)的自变量从一直到的函数值的总和,并且加进
我们已知,所以我们让。如果现在的仍然小于,则跳转第步,否则结束
最终得到的就是答案了。
定义,长为题目表面形式
证明:转化成实际问题求得除递推公式1外另一个复杂度较高的递推公式,综合二公式求得递推公式2(多边形三角剖分问题)
证明:由递推公式2用累积法求得
证明:倒推可得到组合公式1