[OI] 数学与推论证明 1

Contest

本博客更新很慢,有时候你会碰到施工现场(半成品草稿),是正常现象

1. 数论定义

2. 整除

3. 最大公约数与最小公倍数

4. 素数

5. 同余

6. 排列与组合

7. 斐波那契数列

8. 导数与积分

9. 莫比乌斯函数与莫比乌斯反演

10. 容斥原理拓展

11. 初等函数拓展

12. 极限

. 杂项

前情提要

信息学数论也是数学内容,涉及繁杂的数学推理与证明过程,以下为了简明文章内容,说明如下.

  1. "证明过程如下" 替换为 "P.(id)".

  2. "实现代码如下" 替换为 "Program",并将代码折叠.

  3. 上文提到的函数,定理等直接列出,必要处指出定义章节.

  4. 博客排布不等于撰写顺序,需要时会添加.

1.数论定义

1.1 积性函数与数论加性函数

1.1.1 概述

若函数 f(x) 满足 f(1)=1,且对于任意互质的自然数 x,y,都有 f(xy)=f(x)f(y),则 f(x) 为积性函数.

若函数 f(x) 满足 f(1)=1,且对于任意自然数 x,y,都有 f(xy)=f(x)f(y),则 f(x) 为完全积性函数.

若函数 f(x) 对于任意互质的整数 x,y,都有 f(xy)=f(x)+f(y),则 f(x) 为数论加性函数.

1.1.2 积性函数的性质

No.1121f(x),g(x) 为积性函数,则以下函数为积性函数:

f(xp)

fp(x)

f(x)g(x)

2.整除

2.1 概述

若存在整数 c,使 a=bc,则有 b 整除 a,记作 ba,否则 ba.

No.211ab,bc ,则 ac.

No.212ba,bc,则 b(a±c).

No.213ba,则有 a=0|a|=|b|.

No.214(fromNo.213)b,ba,则 a=b.

此外,对于一些特殊的数,满足:

No.215kN+,则 pkqk=(pq)(pn1+pn2q+...+pqn2+qn1),即 (pq)(pkqk).

No.216(fromNo.215)kN+,则 (p1)(pk1).

No.217k 为正奇数,则 (x+y)(xk+yk).

2.2 整除推论

No.221 S(n) 表示 n 的各个数位数字之和,则 9n 的充分必要条件为 9S(n).

P.221

n=ak×10k+...+a1×10+a0,则 S(n)=ak+...+a0. 那么 nS(n)=ak(10k1)+...+a1(101),该式每一项均是 9 的倍数,得证.

3.最大公约数与最小公倍数

3.1 最大公约数概述

定义 (x,y)x,y 的最大公约数. (x,y)定义为 满足 xkykk 的最大值.

No.311 (x,y)=(x,y)=(x,y)

No.312 (x,y)=(y,x)

No.313 (x,y)=(x,y+ax) (aZ)

P.313

(a,b)=k,有 kax+b (xZ),则 k(a,b+ax) 的一个公约数.

假设 (a,b+ax)>k,即 (a,b+ax)=k+m (m>0),有 k+ma,k+mb+ax,k+max,则 k+mb,有 (a,b)=k+m,假设不成立. 故 (a,b)=(a,b+ax).

No.314(a,b)=c,da,db,则 (ad,bd)=cd.

P.314

da,db,说明 a,b 有公因子 d,由最大公约数定义,dc,将该因子除去,c 也相应减少一个因子 d.

3.2 裴蜀定理

No.321a,b 不全为 0,则对任意整数 x,y,有 (a,b)ax+by.

No.322a,b 不全为 0,则存在整数 x,y,使 ax+by=(a,b).

P.322

不妨设 db, (a,b)=d.

可得 dax+by.

sax+by 的最小正值,令 a=sq+r,有 r=a mod s=aq(ax+by)=a(1qx)+b(qy).

r=a mod s,得 0r<s,但因 sax+by 的最小正值,不可能存在满足 ax+by 的更小的正数,而 r=a(1qx)+b(qy) 恰好为 ax+by 的形式,因此只能令 r=0. 所以 sa,b 的一个公约数. 可以得到 ds.

我们知道,两个数的公约数一定不大于它们的最大公约数,而 ds 又要求 ds. 因此只能令 d=s. 得证.

No.323(fromNo.322)a,b 不全为 0,且有正数 d 满足 adbd. 若存在整数 x,y 满足 ax+by=d,则 d=(a,b).

No.324(fromNo.322)a,b 不全为 0,则存在整数 x,y,d,使 ax+by=d 有解的充要条件为 (a,b)d.

3.3 欧几里得算法 (辗转相除法)

欧几里得算法主要用于求 (a,b) 的值,所用的原理可以表示如下:

No.331 (x,y)=(y,x mod y) (x>y).

P.331

不妨设 x>y.

x 拆成两部分: 一部分为 y 的整倍数,另一部分为余下部分,可以得出,余下部分最小为 x mod y.

那么令 x=ky+x mod y (kZ),定义正整数 d 满足 dxdy.

移项,x mod y=xky,则有 x mod yd=xdkyd. 由前方证得等式左方两项均为整数,则等式右方也为整数,那么 dx mod y.

可得 (y,x mod y)=d,得证.

Program
int gcd(int a,int b){
	if(b == 0) return a;
	return gcd(b,a%b);
}

3.4 更相减损术

更相减损术是一种用加减法代替乘除法求最大公约数的过程,利用原理为 No.313. 同时,这种方法还有一种优化策略:

No.341(fromNo.314)2a,2b,则 (a,b)=12(a2,b2).

No.3422a,2b,则 (a,b)=(a2,b).

P.342

2b 说明两者无公因子 2,说明将该因子除去不影响结果.

3.5 扩展欧几里得算法

扩展欧几里得算法可以求出裴蜀方程 ax+by=(a,b) 的一组解.

P.35

GPT 证的,不保证正确性

欧几里得算法(Euclidean algorithm)是一种用来计算两个整数的最大公约数(Greatest Common Divisor, GCD)的算法。它不仅限于求解两个整数的最大公约数,还可以用于求解任意两个整数a和b的扩展欧几里得方程(Extended Euclidean Algorithm, ExGCD):

ax+by=gcd(a,b)

其中,gcd(a,b) 是 a 和 b 的最大公约数。

证明过程

  1. 基本步骤

    • 如果 a=b,则 gcd(a,b)=a=b,此时直接返回 x=1,y=0
    • 如果 a>b,那么可以将问题转化为求 gcd(b,amodb),然后递归调用这个函数。
  2. 递归过程

    • 假设我们已经知道 gcd(a,b)=d,并且找到了一组整数 x1y1 满足 ax1+by1=d
    • 现在考虑 gcd(a,b),其中 a=b,b=amodb。根据基本步骤,我们知道 gcd(b,a)=d,并且有 bx1+ay1=d
    • 由于 a=aabb,我们可以将 ab 的表达式代入到上述等式中,得到:
      b(x1aby1)+a(y1)=d
    • 这样,我们得到了一个新的等式:ax+by=gcd(a,b),其中 x=x1aby1,y=y1
  3. 最终结果

    • 经过递归调用,最终会得到一个简单的等式 ax+by=gcd(a,b),其中 a=b,b=amodb
    • 通过不断调整 xy 的值,可以逐步回溯到初始的 ab,得到满足条件的 xy

示例

以求解 gcd(60,48) 为例:

  • 第一步:60=1×48+12, 所以 gcd(60,48)=gcd(48,12)
  • 第二步:48=4×12+0, 所以 gcd(48,12)=12

使用扩展欧几里得算法,我们得到:

  • a=60,b=48 时,x=1,y=2,满足 60×1+48×(2)=12
  • a=48,b=12 时,x=4,y=1,满足 48×4+12×(1)=12

因此,对于任意两个整数 ab,可以通过扩展欧几里得算法找到满足 ax+by=gcd(a,b) 的整数 xy

Program
int exgcd(int a,int b,int &x,int &y){
    if(b ==0){
        x=1;
        y=0;
        return a;
    }
    int ret=exgcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=t-a/b*y;
    return ret;
}

3.6 求裴蜀等式最小正解

一般来说,我们求裴蜀等式都会解出一个解集组,这时候让我们对于其中一个解取一组特殊值. 因此我们需要根据一组求出来的一般解解出特殊解. 通常情况下我们采用如下等式.

No.361 ax+by=a (xbk)+b (y+ak)

下面我们来讨论解出最小正解的方式.

注意到我们只需要求出最大的 k 值即可,令 xbk>0,有 bk<x,得出 kmax=floor(xb),那么 xans=xbk 即可.

事实上,该式也可写作 xans=(x mod p+p) mod p.

3.7 扩展欧几里得算法解一般裴蜀等式

一般裴蜀等式是指 ax+by=c (a,b,c,x,yZ) 这样的式子. 对于这样的式子,我们有:

No.371 满足 ax+by=c 有解的充要条件为 (a,b)c.

因此,对于 ax+by=c,我们可以将其化为 a (a,b)cx+b (a,b)cy=(a,b),这样,我们可以用扩展欧几里得解出一组 a (a,b)cxb (a,b)cy.

4.素数

4.1 概述

素数是除了 1 与它本身外无其他正因子的整数.

(a,b)=1 的两个整数称互素.

No.411 大于 1 的整数必有素约数.

No.412p 是素数,则对于任意整数 n,要么 pn,要么 p,n 互素.

4.2 算术基本定理

4.3 质因数分解

No.431 一个数 n 的因数 m 一定是由它的质因数组成的

P.431

假设该结论不成立,则说明存在 p,使得 pnpm. 不妨设 m=kp (kZ),则有 kpn,即 mn,与假设矛盾,故结论成立

No.432(fromNo.431) 给一个数 n 乘一个它的因数,不会改变 n 的质因数个数.

4.4 欧拉函数

4.4.1 概述

欧拉函数用于计算小于等于 n 的数中与 n 互质的数的个数. 它的计算公式如下:

φ(n)=n×1iki(11pi)

其中 pin 不重复的质因子.

4.4.2 欧拉函数的性质

No.4421 φ(1)=1

No.4422p 为素数,则 φ(p)=p1.

No.4423p 为素数,则 φ(pk)=(p1) pk1.

P.4423

假设 pl,不妨设 l=mp (mZ). 由欧拉定理中 ln,可知 mppk,即 mpk1,这些数都能被 p 整除,因此不与 pk 互质. 由 No.412,与 pk 互质的数就有 pkpk1=(p1) pk1 个.

No.4424 φ(x) 为积性函数.

No.4425 区间 [1,n] 中全部与 m 互质的数的个数为 nmφ(m).

4.4.3 关于欧拉函数的推论

No.4431pn,则 φ(n×p)=p×φ(n).

P.4431

因为 pn, 不妨设 n=kp (kZ),则 n×p=kp2.

根据欧拉函数的定义,有 φ(kp)=kp×1ili(11pi),且 φ(kp2)=kp2×1jtj(11pj).

因为 kp 已有质因数 p,根据 给一个数 n 乘一个它的因数,不会改变 n 的质因数值 (No.432). 可得 φ(kp)φ(kp2) 的后项是相等的. 那么就有 φ(n×p)=p×φ(n).

4.4.4 欧拉筛

关于单独计算单值的欧拉函数,我们可以直接根据定义得到. 从小到大判断原数能否被当前数整除,若可以则将原数中全部相同质因子都去掉.

需要注意的是,与 n 互质的数中,比 n 大的至多只有一个. 因此我们可以只分解出小于 n 的质因数,假如最后剩下的数字比一要大,那么剩下的数字即为那个互质的数.

Program
int phi(int n){
  	int ans=n;
  	for(int i=2;i<=sqrt(n+0.5);i++){
	    if(n%i==0){
		    ans=ans/i*(i-1);
		    while(n%i==0){
			  	n/=i;
			}
	    }
  	}
  	if(n>1){
	  	ans=ans/n*(n-1);
	}
  	return ans;
}

欧拉筛可以帮我们提前计算出区间内的全部欧拉函数.

我们使用线性筛做基础来进行.

Program

代码中的解释:

  1. 第二行根据 No.4421
  2. 循环前四行为判断素数,b 数组标记合数,prime 数组按顺序记录全部的素数,p 数组为欧拉函数.
  3. 循环第三行利用 No.4422
  4. 后面进行线性筛核心语句
  5. 循环第七行: 若一个合数 n 能被一个质数 p 整除,那么 n×p 中一定包含了能与 n 互质的全部整数.
  6. 循环最后 : 利用 No.4424
void euler(int n){
	p[1]=1;
    for(int i=2;i<=n;++i){
    	if(!b[i]){
        	prime[++num]=i;
            p[i]=i-1;
        }
    	for(int j=1;j<=num&&prime[j]*i<=n;++j){
    		b[i*prime[j]]=true;
        	if(i%prime[j]==0){
        		p[i*prime[j]]=p[i]*prime[j];
           	 	break;
        	}
        	else{
        		p[i*prime[j]]=p[i]*p[prime[j]];
        	}
    	} 
    } 
}

当然,除了线性筛,我们还有一种 O(n logn) 的类埃氏筛做法.

Program
for(int i=1;i<=n;++i){
	p[i]=i;
}
for(int i=2;i<=n;++i){
	if(p[i]==i){
		for(int j=i;j<=n;j+=i){
			p[j]=p[j]*(i-1)/i;
		}
	}
}

4.5 约数个数函数

定义 d(x) 表示 x 的不同正因子个数,形式化地 ,d(x)=ix[ix]

对于一个大于 1 的正整数 n 分解质因数,令 n=i=1kpiai,则有:

d(n)=i=1k(ai+1)

P.4.5

由约数的定义可知 piai 的约数有且仅有 piaj,其中 j[0,i],即一共有 (ai+1) 个.

由乘法原理得证.

5.同余

5.1 概述

若正整数 n,a,b 满足 n(a+b),则称 ab(modc). 否则称 ab(modc).

No.511 ab(modc) 的充要条件为 a mod c=b mod c.

No.512 aa(modn).

No.513ab(modn),bc(modn),则 ac(modn).

No.514ab(modn),cd(modn),则 (a±c)(b±d)(modn).

No.515ab(modn),cd(modn),则 (ac)(bd)(modn).

对于单纯的取模操作,我们也有:

No.516 c (a+b) mod p=c (a mod p+b mod p) mod p.

5.2 费马小定理

No.521p 为素数,a,p 互素. 则 ap11(modp).

No.522(fromNo.521)p 为素数,a,p 互素. 则 apa(modp).

5.3 线性同余方程

线性同余方程是形为 axb(modn) 这样的一元一次方程,为了解出这样的方程,需要掌握如下技巧.

5.3.1 乘法逆元

ax1(modb),则称 xa 在模 b 意义下的乘法逆元,记作 a1.

因为除法取模不满足类分配律,因此出现了乘法逆元来进行 ab mod p 的快速计算.

乘法逆元的定义推导

ab mod p=m,给等式两边同乘 b,有 a mod p=mb mod p . 若存在 ax mod p=m.

不妨设 a,b<p,则有 a=mb mod p. 等式两边同乘 x,有 ax mod p=m mod p=xmb mod p.

联立上述式子,那么 m=xmb mod p,解得 bx mod p=1.

一个逆元方程并不一定有解,a,b 存在倍数关系时无逆元,反之,a,b 互质时存在逆元.

下面我们介绍求逆元的方法,因此以下默认 a,b 不存在倍数关系.

费马小定理可以求出当模数 b 为素数时的逆元.

正确性证明

根据费马小定理,有 ap1 mod p=a×ap2 mod p=1,为逆元方程. 因此 a 在模 p 意义下的逆元为 ap2 mod p.

Program
int quickpow(int a,int n,int p){
    int ans=1;
    while(n){
        if(n&1) ans=ans*a%p;
        a=a*a%p;
        n>>=1;
    }
    return ans;
}

int bace(int a,int p){
    return quickpow(a,p-2,p);
}

扩展欧几里得算法可以求逆元.

正确性证明

若要 ax1(modb),则有 ax=by+1,即 axby=1. 这里 y 为中间参数,取相反数不影响结果. 有 ax+by=1,所以可以使用扩展欧几里得算法求逆元. 只需要满足 a,b 互质.

Program
int exgcd(int a,int b,int &x,int &y){
    if (b==0) {
        x=1;
        y=0;
        return a;
    }
    // 注意传参顺序
    int ret=exgcd(b, a%b, y, x);
    y-=a/b*x;
    return ret;
}

还有一种线性求逆元的方法,适合多次大量预处理时使用,利用的原理为

No.5311 iipi×(p mod i)1(modp)

Program1
ny[1] = 1;
for (int i = 2; i < p; ++i) {
    ny[i] = (long long)-(p / i) * ny[p % i] % p; // 注意最后的模 p 不要忘记
}
Program2
// 因为 1<i<p,所以 p/i 一定小于 p
ny[1] = 1;
for (int i = 2; i < p; ++i) {
    ny[i] = (long long)(p - p / i) * ny[p % i] % p; // 注意最后的模 p 不要忘记
}

5.3.2 线性同余方程

No.5321 线性同余方程 axb(modm) 有解的充要条件为 (a,m)b.

我们注意到 axb(modm) 实际上等价于 axb=ym (yZ). 移项可得 axym=b,不妨设 y=y,那么有 ax+my=b. 因此我们可以利用扩展欧几里得解出一组通解 x0,y0,那么方程的一个解就为 x1=bx0(a,m),通解 x 满足 xx1(modm(a,m)).

5.4 中国剩余定理

中国剩余定理算法可以用于求解一个线性同余方程组 ixai(modn)i (其中模数必须两两互质).

中国剩余定理的主要内容体现流程如下:

  1. 计算 n=ini

  2. 计算 imi=nni

  3. 计算 ici=mi×mi1(modmi)

  4. x=iai×ci mod n.

正确性证明

引用我们在步骤中使用到的变量.

因为全部的 ni 两两互质,因此将全部两两互质的数乘起来,可知 n 其中的质因子 ni 必然只有一个. 那么 mi=nni 中必然没有质因子 ni,也就是说 mi,ni 互质.

因为互质,所以由乘法逆元的定义,我们可以推出

mi×mi11(modni)

No.515,可得

mi×mi1×aiai(modni)

并且根据上述两两互质,又因为 mi=nni,因此 mi mod nj=0,我们还可以得出

mi×mi1×ai0(modnj) (ij)

根据构造,可得

xi(ai×mi×mi1)(modn)

符合原方程组的形式,即存在 x 为原方程的解.

6.排列与组合

6.1 概述

排列是指若干元素排成一列的不同情况 (考虑顺序). 从 n 个元素中选出 m 个数的排列的个数称为 nm 的排列数,记作 Anm.

排列数的计算公式为

Anm=n (n1) (n2)...(nm+1)

也即

Anm=n!(nm)!

组合是将若干元素选入集合内的不同情况 (不考虑顺序). 从 n 个元素中选出 m 个数的组合的个数称为 nm 的组合数,记作 Cnm.

组合数的计算公式为

Cnm=n (n1) (n2)...(nm+1)m (m1) (m2)...1

也即

Cnm=AnmAmm=n!m! (nm)!

一般来说,我们有

Ann=Ann1.

An1=nCn1=n.

Ann=n!Cnn=1.

Cnn1=n.

Cnm=Cnnm.

Cnm=Cn1m1+Cn1m.

6.1.1 二项式定理

二项式定理用于对 (x+y)k 进行展开

No.6111 (x+y)n=i=0nCnixniyi

6.2 快速组合数求法

6.2.1 Lucas 定理

Lucas 定理的适用条件: 组合数很大,模数较小 (一般 105) ,且为素数.

No.6211 Cnm=Cnpmp×Cn mod pm mod p mod p.

P.6211

不妨设 p 为质数. 那么对于 j[1,p),有:

Cpj=p!j! (pj)!=(p1)!(j1)! (pj)!×pj

可以发现提出了一个因子 p. 也就是说 Cpjmodp=0.

那么根据二项式定理,

(1+j)p=1+ip1[Cpi×ji]+jp

因为已证得中间一项中一定有因子 p,故

ip1[Cpi×ji] mod p=0

也即

(1+j)p1+jp(modp)

在这里我们进行构造,设 n=sp+q,m=lp+r (p,r[1,p). 也就是都表示成带余除法式. 那么

(1+x)sp+q=(1+x)sp (1+x)q

根据上面的结论,有

(1+x)sp (1+x)q(1+xp)s (1+x)q(modp)

再根据二项式定理展开,那么

(1+x)sp+q[i (Csi×xpi)]×[i (Cqi×xj)](modp)

假若我们只观察 xlp+r 项. 可以发现 Csp+qlp+r×xlp+rCsl×xlp×Cqr×xr(modp).

根据我们的定义 n=sp+q,m=lp+r,将原式代换,可得

Cnm×xmCsl×Cqr×xm(modp)

两边同时除以 xm

CnmCsl×Cqr(modp)

那么根据定义,有

CnmCnpmp×Cn mod pm mod p(mod )p

Program1
long long power(long long a,long long n){
	long long ans=1;
    while(n){
        if(n&1)ans=ans*a%p;
        a=a*a%p;
        n>>=1;
    }
    return ans;
}
long long C(long long n,long long m){
	if(n<m){
		return 0;
	}
	if(m>n-m){
		m=n-m; //C{n}{m}=C{n}{n-m};
	}
	long long a=1,b=1;
	for(int i=0;i<m;++i){
		a=(a*(n-i))%p;
		b=(b*(i+1))%p;
	}
	return a*power(b,p-2)%p;
}
long long lucas(long long n,long long m){
	if(!m) return 1;
	return lucas(n/p,m/p)*C(n%p,m%p)%p;
}
Program2
long long fact[1000001];
long long power(long long a,long long n){
	long long ans=1;
    while(n){
        if(n&1)ans=ans*a%p;
        a=a*a%p;
        n>>=1;
    }
    return ans;
}
void dofact(){
	fact[0]=1;
	for(int i=1;i<=1000000;++i){
		fact[i]=fact[i-1]*i%p;
	}
}
long long C(long long n,long long m){
	if(!m){
		return 1;
	}
	if(n<m){
		return 0;
	}
	if(m>n-m){
		m=n-m; //C{n}{m}=C{n}{n-m};
	}
	long long ans=fact[n]*power(fact[m],p-2)%p*power(fact[n-m],p-2)%p;
	return ans;
}
long long lucas(long long n,long long m){
	if(!m) return 1;
	return lucas(n/p,m/p)*C(n%p,m%p)%p;
}

7.斐波那契数列

7.1 整除推论

(i,j)=gcd(i,j)

fi=fi1+fi2

fi=fi2×f1+fi1×f2

fi=fi1×f2+fi2×f1

fi=(fi3+fi2)×f2+fi2×f1

fi=fi3×f2+fi2×f3

fi=fik×fk1+Fik+1×fk

fn+m=fn1×fm+fn×fm+1

(f1,f2)=(f2,f3)=(fi,fi1)=(fifi1,fi1)=(fi2,fi1)=1

f(i,j)=(fi,fj)fjfi=ji

因为 f2=1,则 f22x+1(xZ),但 22x+1(xZ),故上述式子存在特例,且该特例唯一.

7.2 约数推论

tot(i)i 的约数的个数,将 i 用唯一分解定理分解为

i=ipici

则有

tot(i)=(ci+1)

那么

tot(i×j)=ipici×jpjcj=tot(i)×tot(j)

tot(x)积性函数.

若质数 pi,则 minj[j(i×p)]=p,且 cpi=2

若质数 pi×p 的最小因子,不妨设

i=pcp×ipicpi

tot(i)=cp×icpi

i×p=pcp+1×ipicpi

tot(i×p)=(cp+1)×icpi

tot(i×p)=tot(i)cp×(cp+1)

所以我们引入 mintimes(i) 表示 i 的最小约数的 ci.

上述式子可以表示成

tot(i×p)=tot(i)mintimes(i)×(mintimes(i)+1)

上述推论对全部 ppi 均成立

7.3 平方和推论

sqrtot(i)i 的约数的平方和,与 tot(i) 类似,可得

sqrtot(x)=i j=0ci(pij)2

sqrtot(i×j)=i j=0ci(pij)2×i j=0ci(pij)2=sqrtot(i)×sqrtot(j)

所以 sqrtot(x) 也为积性函数

同理,不妨设

psum=j=0cpi(pj)2

sqrtot(i)=psum×i j=0ci(pij)2

sqrtot(i×p)=(p2×psum+1)×i j=0ci(pij)2

7.4 通项公式

斐波那契的递推定义式为 fn=fn1+fn2

考虑将递推式构造成等比数列形式,即 gn=kgn1 的形式,再考虑到斐波那契的递推式由两个元素决定,故表示如下:

fnλfn1=μ(fn1λfn2)

fn=fn1+fn2 代入,得

fn1+fn2λfn1=μfn1μλfn2

(μ+λ1)fn1=(1+μλ)fn2

因为 fn1fn2,故有:

{μ+λ1=01+μλ=0

解得

{λ=1+52μ=152

{λ=152μ=1+52

带回等比数列,归纳出通项公式:

(1)fn1+52fn1=(152)n2(f21+52f1)

(2)fn152fn1=(1+52)n2(f2152f1)

因为这两个式子相对于原式均成立,因此我们尝试从两个式子中消掉 fn1 项,可知 (2)×152(1)×1+52 即可得到通项公式

整理得

fn=15[(5+12)n(152)n]

7.5 斐波那契间项积与中项平方的关系

fnfn2fn12=(1)n1

正确性证明

为了简化我们的证明,以下令 P=5+12,Q=152,则通项公式可表述为 15(PnQn)

将原式全部用通项公式代换,得

15×5(PnQn)(Pn2Qn2)1(5)2(Pn1Qn1)2

全部拆开

15[P2n2+Q2n2PnQn2Pn2Qn(P2n2+Q2n22Pn1Qn1)]

消项

15[PnQn2Pn2Qn+2Pn1Qn1]

变形

15[Pn1Qn1(PQ+QP2)]

15[(PQ)n1(PQ+QP2)]

因为上文中设 P=5+12,Q=152,故 PQ=1,PQ=3+52,QP=3sqrt52,PQ+QP2=5,消去 15,得

fnfn2fn12=(1)n1

7.6 斐波那契同比

n+ 时,fnfn1=fn1fn2

正确性证明

由 7.5 可知,fnfn2fn12=(1)n1,对其移项

fnfn2=(1)n1+fn12

同除 fn1fn2

fnfn1=(1)n1fn1fn2+fn1fn2

n+ 时,(1)n1fn1fn20,故有

fnfn1=fn1fn2

7.7 斐波那契黄金公比

由 7.6,设 fnfn1=fn1fn2=k,有

fn1+fn2fn1=fn1fn2=k

1+fn2fn1=fn1fn2=k

fn1fn2+fn22=fn12

此时将 fn1=kfn2 代入

kfn22+fn22=k2fn22

消去 fn22

k+1=k2

解得 k=1+52,即黄金分割比

8.导数与积分

8.1 导数

8.1.1 导数的意义

f(x)x 处的导数 f(x) 的含义为:f(x) 在 x 处的切线斜率 k. 如 f(x0):kx+b=k.

8.1.2 基本导数公式

[f(x)+g(x)]=f(x)+g(x)

[f(x)×g(x)]=f(x)g(x)+f(x)g(x)

推论

[kf(x)]=kf(x)

[f(x)g(x)]=f(x)g=(x)f(x)g(x)g2(x)

8.1.3 初等函数导数公式

  1. (k)=0

  2. (xk)=kxk1

  3. (ax)=axln a

  4. (logax)=1xln a

  5. (sin x)=cos x

  6. (cos x)=sin x

  7. (tan x)=sec2 x

  8. (sinh x)=cosh x

8.1.4 反函数公式

[f1(x)]=f(x)×f2(x)

8.1.5 复合函数导数公式

ddxf[g(x)]=ddxg(x)×dd g(x)f[g(x)]

8.1.6 牛顿莱布尼茨公式

(f(x)g(x))n=k=0nCnkfk(x)gnk(x)

举点例子

2x3+3x 求导

套式子,f(x)=2(x3)+(3x)=6x2+3xln 3

或者使用公式 f(x)=f(x+dx)f(x)dx 直接计算,其中 dx 是一个引入的无穷小的变量,先约,然后按 kdx=0 进行消项.

x3 求导

df(x)dx=(x+dx)3x3dx=x3+3x2dx+3xdx2+dx3x3dx=3x2+3xdxdx2,当 dx0 时,df(x)dx=3x2

8.2 积分

8.2.1 定义

abf(x)dx

表示 f(x) 在区间 [a,b] 内的图像与 x 轴围成封闭图形的面积(这样说是不严谨的,实际上还要包括 y=a,y=b ).

032dx=2×(30)=6

表示函数 f(x)=2y=0,y=3,x 轴围成的图形面积为 6.

积分符号用来表示 “某段区间内连续不断的加和” 这样的概念,不一定非得是面积. 只不过面积是长乘宽,当宽无穷小时(即 dx),对应的长即为 f(x),面积为 f(x)dx.

8.2.2 基本定理

f(x)=ddxg(x),则

abf(x)dx=abddxg(x)dx=abdg(x)

实际上,它告诉我们的是 “将 g(x)[a,b] 的微小变化加和”,即:

abg(x)dx=g(b)g(a)

根据基本定理,我们要求一个函数 f(x) 的积分,重在知道一个 g(x),使得 g(x)=f(x),因为对于任意合适的 g(x)[g(x)+c]=f(x),所以称 g(x)+cf(x) 的不定积分,其中 cR.

比如我们需要求出

abx2dx

首先我们需要知道 x2 的最简单的不定积分应为 13x3,因为 (13x3)=x2,则,

abx2dx=g(b)g(a)=13(b3a3)

8.2.3 算术定理

1

ab[f(x)+g(x)]dx=abf(x)dx+abg(x)dx

2

ab[kf(x)]dx=kabf(x)dx

3

ab[f(x)g(x)]dx=f(b)g(b)f(a)g(a)

ab[f(x)g(x)+f(x)g(x)]dx=f(b)g(b)f(a)g(a)

根据 1 有:

ab[f(x)g(x)]+ab[f(x)g(x)]dx=f(b)g(b)f(a)g(a)

移项:

ab[f(x)g(x)]=f(b)g(b)f(a)g(a)ab[f(x)g(x)]dx

8.2.4 换元法

d[F(u)]=d[F(ϕ(x)]=f[ϕ(x)]ϕ(x)dxf[ϕ(x)]ϕ(x)dx=F[ϕ(x)]+C=[f(u)du]u=ϕ(x)

f(x)dx=[f[ϕ(t)]ϕ(t)dt]t=ϕ1(x)

8.2.5 逆基本定理

ddx[axf(x)dx]=ddx[ax+dxf(x)dxaxf(x)dx]=f(x)

9. 莫比乌斯函数与莫比乌斯反演

9.1 莫比乌斯函数

9.1.1 定义

μ 为莫比乌斯函数,则有:

μ(x)={1(n=1)0( i (ki=x,kZiZ))(1)iprime[ix]

直观地说,只要 x 的某个质因子出现的次数超过一次,则有 μ(x)=0,否则,mu(x) 即为 (1)t,其中 tx 的质因数总数.

9.1.2 性质

No.9121 (i,j)=1μ(i×j)=μ(i)×μ(j)

P.9121

μ(A)=1,则有 μ(A)×μ(B)=1×μ(B)=μ(1×B),结果成立

μ(A)=0,则有 μ(A)×μ(B)=0,结果成立

否则设 A=iprimei,B=jprimej (ij),则有 μ(A)×μ(B)=μ(A×B)

No.9122

dnμ(d)={1(n=1)0(n1)

P.9122

n=0 时,原式等于 0

n=1 时,原式等于 μ(1)=1

否则,设 n 的唯一分解式为 n=1ikpiai,由 μ(n)0ai=1

显然,dn,有 i 个质因子的数 dCki 种组合情况,每种组合的值为 (1)i,即:

dnμ(d)=0ik{Cki×(1)i}

使用二项式定理转化:

dnμ(d)=(1+(1))k=0k

发现此时在定义域 (k0) 内恒为 0,易知当 n>1 时,kn1,因此 μ(n)=0,证毕.

9.2 莫比乌斯反演

9.2.1 不完全结论

f(a,b,k)={1((a,b)=k)0

对于

g(n,m,k)=i=1nj=1mf(i,j,k)

考虑到

g(n,m,k)=i=1nkj1mkf(i,j,1)

根据 No.9122 得出推导式:

d(a,b)μ(d)={1((a,b)=1)0((a,b)1)

代入有:

f(i,j,1)=d(i,j)μ(d)

即:

g(n,m,k)=i=1nkj1mk=d(i,j)μ(d)

将原式等价转换,可以得到

g(n,m,k)=d=1μ(d)i=1nkj1mkh(i,j)

其中

h(i,j)={1(di,dj)0

(可以发现,在这里仅仅是将判断条件与枚举条件互相变换了,而答案是不变的)

在区间 [1,nk] 中,满足条件 diinkd 个,因此原式可化为

g(n,m,k)=d=1μ(d)×nkd×mkd

可以证明,当 d>min(nk,mk) 时不存在解.

9.2.2 完全结论

设两个函数 f,g 满足如下等式:

g(n)=dnf(d)

则有:

f(n)=dnμ(d)g(nd)

特别地:对于莫比乌斯反演还有如下等式:

设两个函数 f,g 满足如下等式:

g(n)=ndf(d)

则有:

f(n)=ndμ(dn)g(d)

10.容斥原理拓展

10.1 二项式反演

P.10.1(1)

U={S1,S2,S3...Sn},且任意 i 个元素的交集都相等

定义 g(x)x 个集合的交集,f(x)x 个集合补集的交集(定义 f(0)=g(0)=U),则:

inSi∣=∣U+i{(1)i×f(i)}

可知对 g(i),符合要求的 f(i) 组合共有 Cni 种,即原式可以化为:

inSi∣=in(1)iCnif(i)

同理有

inUSi∣=in(1)iCnig(i)

因为

f(n)∣=∣inUSi,g(n)∣=∣inSi

因此得出结论:

g(n)=i=0n(1)iCnif(i)f(n)=i=0n(1)iCnig(i)

P.10.1(2)

因为

Cni×Cij=n!(ni)!i!×i!(ij)!j!=n!(nj)!j!×(nj)![(nj)(ni)]!(ij)!=Cnj×Cnjn1

因此

i=jn{(1)i×Cni×(1)j×Cij}=Cnj(1)ji=0njCnji=Cnj×(11)nj=Cnj×0nj

jn 时,原式值为 0,否则值为 1.

g(n)=i=0n(1)iCnif(i)f(n)=i=0n(1)iCnig(i) 成立时,可以推知

f(n)=i=0n(1)iCni=i=0n(1)iCnii=jn(1)jCijf(j)=j=0nf(j)i=jn{(1)i×Cni×(1)j×Cij}

该式末项 i=jn{(1)i×Cni×(1)j×Cij} 已有上述结论,故当 jnj=n 时分别带入讨论,发现原式均成立,证毕.

事实上,二项式反演还有一个更常用的推导式:

g(n)=i=0nCnif(i)f(n)=i=0n(1)niCnig(i)

根据二项式反演的性质,我们通常会构造一组 {f(i),g(i)},使得两者之间存在包含关系并且有一者很方便求出,通过反演来快速得到另一者的值.

二项式反演还有其他形式:

g(n)=i=nN(1)iCnif(i)f(n)=i=nN(1)iCnig(i)

g(n)=i=nNCnif(i)f(n)=i=nN(1)inCnig(i)

10.2 Min-Max 容斥

对于满足全序关系并且其中元素满足可加减性的序列 {xi},设其长度为 n,并设 S={1,2,3,,n} ,则有:

maxiSxi=TS(1)|T|1minjTxj

miniSxi=TS(1)|T|1maxjTxj

一个常用的实际应用为 Min-Max 容斥的低维版本:min(a,b)=a+bmax(a,b)

证明略.

10.3 错位排列

满足 iai 的排列被称为错位排列.

10.3.1 公式

套用补集的公式,问题变成求

|i=1nSi|

可以知道,Si 的含义是满足 Pi=i 的排列的数量。用容斥原理把问题式子展开,需要对若干个特定的集合的交集求大小,即:

|i=1kSai|

其中省略了 ai<ai+1 的条件以方便表示

上述 k 个集合的交集表示有 k 个变量满足 Pai=ai 的排列数,而剩下 nk 个数的位置任意,因此排列数:

|i=1kSai|=(nk)!

那么选择 k 个元素的方案数为

Cnk,因此有:

|i=1nSi|=k=1n(1)k1a1,,k|i=1kSai|=k=1n(1)k1Cnk(nk)!=k=1n(1)k1n!k!=n!k=1n(1)k1k!

因此 n 的错位排列数为:

Dn=n!n!k=1n(1)k1k!=n!k=0n(1)kk!

10.3.2 递推式

Dn=(n1)(Dn1+Dn2)

Dn=nDn1+(1)n)

待证明

10.4 Catalan 数

1 1 2 5 14 42 132

Hn=(2nn)n+1

关于 Catalan 数的常见公式:

Hn={i=1nHi1Hnin2,nN+1n=0,1

Hn=Hn1(4n2)n+1

Hn=C2nnC2nn1

11.初等函数拓展

11.1 双曲三角函数

sinhx=exex2,是奇函数,定义域,值域都是 R,在值域内单增

双曲正弦有两个渐进分别是 12ex(x+),12ex(x)

coshx=ex+ex2,是偶函数,定义域,值域都是 R,在 (,0] 单减,最小值是 cosh0=1

双曲余弦有两个渐进分别是 12ex(x+),12ex(x)

tanhx=sinhxcoshx,这是一个奇函数,定义域和值域同样是 R

有几个比较好的等式:

sinh(x+y)=sinhxcoshy+coshxsinhy

sinh(xy)=sinhxcoshycoshxsinhy

cosh(x+y)=coshxcoshysinhxsinhy

cosh(xy)=coshxcoshy+sinhxsinhy

证明第一个式子:

sinhxcoshy+coshxsinhy=exex2×ey+ey2+ex+ex2×eyey2=ex+yeyx+exye(x+y)4+ex+y+eyxexye(x+y)4=ex+ye(x+y)2=sinh(x+y)

剩下的三个式子同理,暴力拆分合并即可

从这几个式子可以导出一些式子

cosh2xsinh2x=1

可以通过 cosh(xx)=coshxcoshx+sinhxsinhx 推知

sinh2x=2sinhxcoshx

可以通过 sinh(x+x)=sinhxcoshx+coshxsinhx 推知

cosh2x=cosh2x+sinh2x

可以通过 cosh(x+x)=coshxcoshxsinhxsinhx 推知

从定义还可以导出一些反函数

arcsinhx=ln(x+x2+1)

arccoshx=ln(x+x21)

arctanhx=12ln1+x1x

12.极限

从这一章开始就是高等数学内容了,我不会系统地按书照抄一遍,只挑一些好的讲讲

12.1 定义与求法

limxx0f(x)=a,则 ε>0,\existtN+,当 x>t 时,有 |f(x)a|<ε

同样可以定义左极限和右极限

左极限:

右极限:

一般来说,当 f(x)x0 处有定义时,limxx0f(x)=f(x0)

. 杂项

.1 平方数模意义下的特殊性质

对于任意 xZ,都有 x2 mod 32.

P..1

x=3k+p (k,pZ, 0p2)

则有

x2=(3k+p)2=9k2+6kp+p2

x2p2(mod3)

p=0 时,x2 mod 3=0

p=1 时,x2 mod 3=1

p=2 时,x2 mod 3=4 mod 3=1

综上,x2 mod 32

.2 调和级数的发散性

证明下述式子:

i=11i=

P..2

考虑对调和级数进行分组:

{11}+{12}+{13+14}+{15+16+17+18}>1+12+12+12

以此类推,将区间 (12k1,12k] 内的数分为一组,共 2k1 个数,最小数为 12k,可知其和最小为 12k×2k1=12,依次分组,得到的 12 也为无限组,即其不收敛

.3 模意义概率

设有一分数 fa,b=ab,则有 fa,bmodp=a×bp2

定理一

(fa,b×fc,d)modp=(fa,bmodp)×(fc,dmodp)

证明显然,因为 (a×bp2)×(c×dp2)=(a×c)×(b×d)p2

定理二

(1fa,b)modp=(1(fa,b)modp)modp

(定义 amodp=(a+kp)modp (a<0,a+kp0)

posted @   HaneDaniko  阅读(128)  评论(1编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示