排列组合
- 组合数奇偶性判断: C(n,m)为奇数⇔(nC(n,m)为奇数⇔(n & m)==mm)==m
- 第二类斯特林数奇偶性判断:
{nk}≡(n−⌈k+12⌉⌊k−12⌋)mod2{nk}≡(n−⌈k+12⌉⌊k−12⌋)mod2
基础数论
公式
- 欧拉降幂(扩展欧拉定理)
ab≡⎧⎩⎨⎪⎪ab%ϕ(p) gcd(a,p)=1ab gcd(a,p)≠1,b<ϕ(p)ab%ϕ(p)+ϕ(p) gcd(a,p)≠1,b≥ϕ(p) (mod p)ab≡{ab%ϕ(p) gcd(a,p)=1ab gcd(a,p)≠1,b<ϕ(p)ab%ϕ(p)+ϕ(p) gcd(a,p)≠1,b≥ϕ(p) (mod p) - 费马小定理
若pp是质数且,则ap−1≡1 (modp)ap−1≡1 (modp) - 连续区间内逆元的线性递推
对于求解1−p1−p之间的所有数关于奇质数pp的逆元,存在线性递推关系如下: - 费马大定理
当整数n>2n>2时,关于x,y,zx,y,z的方程 xn+yn=znxn+yn=zn 没有正整数解 - 构造勾股数
已知正整数a,b,ca,b,c满足a2+b2=c2a2+b2=c2,并且aa是已知的,求解方程的一组正整数解
- 当为大于11的奇数时,b=2∗n2+2n, c=2∗n2+2n+1b=2∗n2+2n, c=2∗n2+2n+1
- 当aa为大于的偶数2n2n时, b=n2−1, c=n2+1b=n2−1, c=n2+1
证明
线性求解1−p1−p的逆元
对于求解1−p1−p的所有数关于奇质数pp的逆元,存在递推关系式如下:
证明:
设t=M/i,k=M%it=M/i,k=M%i,那么
⇒t∗i+k≡0(modM)⇒t∗i+k≡0(modM)
⇒−t∗i≡k(modM)⇒−t∗i≡k(modM)
对上式两边同时除以i∗ki∗k
得到−t∗inv[k]≡inv[i](modM)−t∗inv[k]≡inv[i](modM)
再把tt和替换掉,最终得到inv[i]=(M−M/i)∗inv[M%i]%Minv[i]=(M−M/i)∗inv[M%i]%M
初始化inv[1]=1inv[1]=1,就可以通过递推线性求出1−p1−p模奇素数pp的所有逆元了。自然数幂和
- 通过递推公式求解:
记,可以得到如下递归式S(n,k)=1k+1[(n+1)k+1−(C2k+1S(n,k−1)+C3k+1S(n,k−2)+⋯+Ckk+1S(n,1)+n+1)]S(n,k)=1k+1[(n+1)k+1−(Ck+12S(n,k−1)+Ck+13S(n,k−2)+⋯+Ck+1kS(n,1)+n+1)]证明:
由二项式定理,可以得到(n+1)k+1−nk=C1k+1nk+C2k+1nk−1+⋯+Ckk+1n+1(n+1)k+1−nk=Ck+11nk+Ck+12nk−1+⋯+Ck+1kn+1,令n=1,2,3,…n=1,2,3,…,累加后可得(n+1)k+1−1=C1k+1∑i=1nik+C2k+1∑i=1nik−1+⋯+Ckk+1∑i=1ni+n(n+1)k+1−1=Ck+11∑i=1nik+Ck+12∑i=1nik−1+⋯+Ck+1k∑i=1ni+n进一步得到nk=1k+1[(n+1)k+1−(C2k+1∑i=1nik−1+C3k+1∑i=1nik−2⋯+Ckk+1∑i=1ni+n+1)]nk=1k+1[(n+1)k+1−(Ck+12∑i=1nik−1+Ck+13∑i=1nik−2⋯+Ck+1k∑i=1ni+n+1)]记S(n,k)=∑ni=1ikS(n,k)=∑i=1nik,可以得到如下递归式S(n,k)=1k+1[(n+1)k+1−(C2k+1S(n,k−1)+C3k+1S(n,k−2)+⋯+Ckk+1S(n,1)+n+1)]S(n,k)=1k+1[(n+1)k+1−(Ck+12S(n,k−1)+Ck+13S(n,k−2)+⋯+Ck+1kS(n,1)+n+1)]递归出口是k==1k==1, S(n,k)=n(n+1)2S(n,k)=n(n+1)2
在递归的过程中进行记忆化,可以在O(k2)O(k2)的时间复杂度内求解自然数和- 通过伯努利数求解
通过伯努利数以及必要的预处理,可以在线性时间复杂度内求解出自然数幂和,公式描述如下:∑i=1nik=1k+1∑i=1k+1Cik+1Bk−i+1(n+1)i∑i=1nik=1k+1∑i=1k+1Ck+1iBk−i+1(n+1)i
求伯努利数的方法:
伯努利数满足条件B0=1B0=1,且有∑nk=1Ckn+1=0∑k=1nCn+1k=0,那么继续得到Bn=−1n+1(C0n+1B0+C1n+1B1+⋯+Cn−1n+1Bn−1)Bn=−1n+1(Cn+10B0+Cn+11B1+⋯+Cn+1n−1Bn−1)这就是伯努利数的递推公式。
- 通过伯努利数求解