简介
OI 的数学中需要用到很多数学知识,虽然一般来说记一下结论就足够了,但是这里我还是挑一些印象比较深刻的结论记录一下,方便日后复习。
本文主要是关于级数公式以及数论中的一些基本公式,像欧拉定理那样的知识点记录在单独的文章中方便我专题复习使用。
常用级数
平方和公式还是比较常用的,下面两个式子都可以数学归纳法证明出来,就不多说了。
x=1∑nxx=1∑nx2=2n(n+1)=6n(n+1)(2n+1)
但是,除了数学归纳法这个 Bug 一样的存在,其实还可以通过构造的方式求一下平方和公式。
23−1333−23(n+1)3−n3=3×12+3×1+1=3×22+3×2+1⋯=3n2+3n+1
累加得到:
(n+1)3−1Sn=3Sn+23n(n+1)+n=6n(n+1)(2n+1)
等比级数
大家都知道等比数列的求和公式:
Sn={na1,q=11−qa1(1−qn),q=1
当 ∣q∣<1 时,等比级数是收敛的:
n→+∞limSn=n→+∞lim1−qa1(1−qn)=1−qa1
易证当 ∣q∣≥1 时,等比级数是发散的,这里就不写了。
调和级数
首先大家都知道调和级数和对数是一个级别的,即:
x=1∑nx1=O(lnn)
这个证明起来应该是很容易的,将调和级数看作一个个小矩形的面积和,可以得到:
∫1n+1x1dx<x=1∑nx1<∫1nx1dx+1
化简一下:
ln(n+1)−lnn<x=1∑nx1−lnn<1
我们知道:
n→+∞limln(n+1)−lnn=0
所以就可以粗略的证明出来:
0<n→+∞limx=1∑nx1−lnn<1
调和级数很多时候用于计算复杂度,所以还是很重要的。
素数调和级数
设 pi 为第 i 大的素数,那么:
i=1∑npi1=O(ln(lnn))
根据唯一分解定理,当 n→+∞ 可以得到:
i=1∏n(j=0∑+∞pij1)=i=1∏n1−pi−11=i=1∑ni1
左边里面是个等比级数,公比为 pi1<1,所以它是收敛的。
两边取对数,可以得到:
i=1∑n−ln(1−pi1)=ln(lnn)
还可以继续化简,证明 ln(x+1)∼x:
x→0limxln(x+1)=x→0limln(x+1)x1=1
所以:
i=1∑npi1=O(ln(lnn))
得证。
约数个数
把 n 质因数分解,设它有 t 个质因数,那么约数个数为:
nd(n)=i=1∏tpiki=i=1∏t(ki+1)
根据乘法原理,每一个质因数的次数都可以在 0∼ki 中选一个,满足 d(n)≤3n,证明如下:
引理:函数 f(x)=(x+1)2px,x∈N,p∈N∗ 在 p=2 时在 [2,+∞) 单增,当 p≥3 时在 [1,+∞) 单增,证明:
f′(x)=(x+1)4pxlnp⋅(x+1)2−px⋅2(x+1)=(x+1)4px(x+1)(xlnp+lnp−2)
所以 (x+1)lnp−2 这个增函数决定 f′(x) 的符号,它有且只有一个变号零点 x=lnp2−1,下面讨论一下 f(x) 的最小值,只讨论整数情况。
- p=2 时 x≈1.89 且 f(x)≥f(2)=94。
- p=3 时 x≈0.82,并且 f(x)≥f(1)=43。
- p≥4 时 f(x)≥min{f(1),f(0)}=min{p/4,1}=1
因此可以构造出:
d2(n)3n=3(k1+1)2p1k1(k2+1)2p2k2⋯(kt+1)2ptkt≥3(k1+1)22k1(k2+1)23k2≥3⋅94⋅43=1
则 d(n)≤3n,这个上界是很宽松的,看作 O(n)。
约数之和
把 n 质因数分解,设它有 t 个质因数,那么约数之和:
nσ(n)=i=1∏tpiki=i=1∏t(j=0∑kipij)=i=1∏tpi−1piki+1−1
根据唯一分解定理,这些能组合成 n 的所有约数。下面对其上界进行估计:
σ(n)=d∣n∑d≤i=1∑n⌊in⌋=O(nlnn)
右式比左式多了 d∣n 的项,所以是小于等于的关系。
二项式定理
分析复杂度的时候可能会用到,比如状压 DP 中枚举子集的子集复杂度是 O(3n)
(a+b)n=i=0∑n(in)aibn−i
同时也可以证明 (amodp)k≡ak(modp):
(a+p)k≡i=0∑k(ik)aipk−i≡ak(modp)
因为只有 i=k 时才满足 pk−i≡0(modp)。
GCD & LCM
辗转相减法就不说了,首先根据算数基本定理,设 a=∏pα,b=∏pβ,c=∏pγ,则有一个更为本质的式子:
gcd(a,b)lcm(a,b)=∏pmin(α,β)=∏pmax(α,β)
这个可以用来证明一些式子,比如:
gcd(a,b)×lcm(a,b)=∏pmin(α,β)+max(α,β)=∏pα+β=a×b
也可以证明结合律,即:
gcd(a,gcd(b,c))=∏pmin(α,min(β,γ))=∏pmin(α,β,γ)=gcd(a,b,c)
这也可以用于求 n 个数的高精 lcm,不过考这个也挺没意思的。
数论分块(整除分块)
对于正整数 n,当 k=⌊xn⌋ 时,x 的最大值是 ⌊kn⌋。
下面求一下这个值的来源:
k=⌊xn⌋=⌊x+dn⌋
设成余数的形式:
{n=kx+r1n=k(x+d)+r2r1∈[0,x)r2∈[0,x+d)
可以解出:
r2d=r1−kd≥0≤⌊kr1⌋=⌊kn−kx⌋=⌊kn⌋−x
当 d 取到最大值时,有:
{r2=n−k⌊kn⌋=nmodkr1=r2+kd=n−kx=n−x⌊xn⌋=nmodx
有 r1 满足条件,r2≤r1 肯定也满足条件。结论得证。
自然数 d 次方和
可以证明 Sd(n)=∑i=1n−1id 一定是 d+1 次的多项式。
当 d=0 时显然,设 d≤k 时成立,那么当 d=k+1 时:
(j+1)d+1−jd+1=i=0∑d(id+1)ji
两边求和,有:
j=0∑n−1((j+1)d+1−jd+1)=j=0∑n−1i=0∑d(id+1)ji
即:
nd+1=i=0∑d(id+1)Si(n)
移项可以得到:
(d+1)Sd(n)=nd+1−i=0∑d−1(id+1)Si(n)
由于 Si(n) 都是不超过 d 次的多项式,所以 Sd(n) 是一个 d+1 次的多项式。