数学总结
抽屉原理
基本解释:
- 有 n+m 个物品分成 n 组,至少有 n 个组有两个物体
- 把多余 n×m+1 个物体放入 n 个抽屉里,至少有一个抽屉有不少于 m+1 个物体
- 把无数还多件物体放入n个抽屉,则至少有一个抽屉里有无数个物体。
第二抽屉原理
把 nm−1 个物体放入 n 个抽屉里,其中必有一个抽屉至多有 m−1 个物体
例题
P7738 [NOI2021] 量子通信
由于 k<16 且 162=256 ,故我们将原 01 串分为 16 块
又抽屉原理(鸽巢原理),字典与信息串中至少有 1 个段相等。
所以我们将在满足在第 i 个块相等的串用前向星连接起来。
同时,我们也可以将 16 位 01 串有多少个 1 给处理出来
我们每次比较的步骤:
- 将信息串化为 01 串,分成 16 块
- 对于每一块,我们将在前向星中存起来序列与之比较
- 直到比较出一个在字典中的串符合要求,退出。
时间复杂度: O(16∗16∗m∗x)
x 代表前向星中所存的串的期望个数
由题可知,字典是完全随机的,所以对于每一种 x,其大概存了 n216=7 个串
所以时间复杂度为 2e8
赛瓦维斯特定理
基本解释
已知 a,b 为大于 1 的正整数, (a,b)=1 ,则使不定方程 ax+by=C 无负数解的最大整数 C=ab−a−b
裴蜀定理
基本解释:
使得方程 ax+by=1 有解的充要条件为 (a,b)=1
推论:
- 使得方程 ax+by=c 有整数解分条件为 gcd(a,b)|c
- 方程 ax+by=c 有解 (x,y) 则 (cgcd(a,b)x,cgcd(a,b)y) 也一定是解
- 方程 ax+by=c 的解为 (x,y) 则 (x+kbgcd(a,b),y−kbgcd(a,b)),k∈Z 也是一组解
欧拉函数
基本解释:
ϕ(n) 表示在 [1,n] 中与 n 互质的数的个数
ϕ(x)=x∗∏ni=1(1−1primei)
特别的 ϕ(1)=1
性质
-
积性函数
gcd(a,b)=1,ϕ(a∗b)=ϕ(a)ϕ(b)
-
a|b,ϕ(b∗a)=a∗ϕ(b)
-
gcd(2,n)!=1,ϕ(2∗n)=ϕ(n)
-
∑p|nϕ(p)=n
求法
- O(√n)
- 线筛 O(n) 求
中国剩余定理
f(x)=⎧⎪
⎪
⎪
⎪
⎪
⎪
⎪⎨⎪
⎪
⎪
⎪
⎪
⎪
⎪⎩x≡a1(modm1)x≡a2(modm2)...x≡an(modmn)其中:m1,m2,m3...,mn互质。
且 M=n∏i=1mi,Mi=Mmi,ti=M−1i,ti 是在模 mi 意义下的乘法逆元
则有解 x=(n∑i=1aitiMi)+kM,k∈Z ,最小解 =(n∑i=1aitiMi)%M
逆元
定义:
在模 m 的意义下,使得 x∗y≡1(modm)
则 y 为 x 的逆元,记为 x−1
求法
-
欧拉定理
gcd(a,n)=1,aϕ(n)≡1(modn)
-
费马小定理
gcd(a,p)=1且p为质数,则a∗ap−2≡(modp)
-
拓展欧拉定理
an≡{an (n<ϕ(p))an modϕ(p)+ϕ(p) (n>=ϕ(p))(modp)
-
线性求逆
结论:i−1=(p−p/i)∗(p%i)−1%p ,其中 p 为模数,p>i
-
离线求逆
我们求 a1,a2,..,an 在模 p 下的逆元
不妨设 M=∏ni=1ai ,求出 M−1
从后往前 ai=M−1i∗Mi−1,M−1i−1=M−1i∗ai
卡特兰数
递推式:
- C(n)=C(0)C(n−1)+C(1)C(n−2)+..+C(n−1)C(1)
- (n−3)Cn=n2(C3Cn−1+C4Cn−2+..+Cn−1C3)
- h(n)=h(n−1)∗(4∗n−2)/(n+1)
表达式:
- Cn=(n2n)n+1=(n2n)−(n−12n)
- 特别的 C1=C0=1
用途:
-
出栈入栈的顺序个数
设有 n 个数时,方案数为 f(n)
则有 f(n)=f(n−1)f(0)+f(n−2)f(1)+..+f(0)f(n−1)
特别的 f(1)=f(0)=1
-
在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。
设 f(n) 代表边数,则有 f(n)=f(0)∗f(n)+f(1)∗f(n−1)+...+f(n)f(n)
特别的 f(3)=f(2)=1 ,则易得 f(n)=C(n−2)
-
给定N个节点,能构成 Cn 种不同的二叉搜索树。
-
有 n 对括号,其正确排列的个数为 Cn
P3200 [HNOI2009]有趣的数列
题意简述
一个数列,满足 a2i<a2(i+1),a2i−1<a2(i+1)−1,a2i−1<a2i
由此可得:
对于每一个偶数位 2i 都满足其大于之前的所有数,并且 a2i>=2i
所以转化题意:将 2∗n 个数,以此填入最左边的奇数位或者偶数位。
可以证明,当我们加入一个数 j 后,要保证在奇数位上的数字的个数不少于在偶数位上的。
证明:
我们假设已经填了 2a 个数,奇数位偶数位各 a 个,此时下一个数为 2a+1 ,下一个偶数位的最小要求为 2(a+1) ,此时无论如何第 2a+1 个数都不可以填入偶数位中,只可以填入奇数位。
所以此时就变成了卡特兰数的推到过程,设在偶数位加数为 −1 ,奇数位加数为 1 ,求保证随时前缀和和为非负数的方案有多少种。
自然为 C(2n,n)n+1
注意模数不一定为质数,所以以使用唯一分解定理约分。
高斯消元
例题
P2447 [SDOI2010] 外星千足虫
其实和一般的高斯消元差不多,但是由于只考虑其自己的奇偶性,所以将加减改为取亦或就可以了
矩阵
目前看到的大多为和图论结合题目
例题
P6190 [NOI Online #1 入门组] 魔法
用弗洛伊德+矩阵加速
可以看到,当我们算出使用了一次魔法的邻接矩阵的 n 次方
即可算出使用了 n 次魔法的邻接矩阵
期望
一般和其他的数论一起考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效