数论+组合
注:引理见后面第四部分
1.欧拉函数,欧拉筛及应用
1.欧拉筛:
for(int i = 2;i <= N;i++)
{
if(!vis[i]) pri[++cnt] = i;
for(int j = 1;i * pri[j] <= N;j++)
{
int u = i * pri[j];
vis[u] = 1;
if(i % pri[j] == 0) break;
}
}
2.欧拉函数:
计算:
用欧拉筛实现:
设
1>若
则
2>若
则
2.定理
欧拉定理:
若
则
裴蜀定理
设
则存在
推广1:存在 ,使得
推广2:存在 ,使得
扩展欧几里得
对方程
可得到
而
则
又有
设
则
整理得
则
这是相邻两组解的关系,那么这样推下去,则
则有
则存在特解
递归反推每一组解即可
ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b == 0)
{
x = 1;y = 0;
return a;
}
ll d;
d = exgcd(b,a % b,x,y);
ll t = x;
x = y;
y = t - a / b * y;
return d;
}
通解:
扩展欧拉定理
证明:
对于第一个式子,由欧拉定理
第二个式子用于
下证第三个式子
(分解质因数)
代入
$\prod\limits_{i = 1}{s}p_ib \equiv \prod\limits_{i = 1}^{s}p_i ^{b \operatorname{mod} \varphi(p)+\varphi(p)} \pmod p $
即证明对
(在此之后,模数更换为
即
如果
如果不等于1,则
设
则
又有
那么
又因为
并由①:
故
(由引理)
则
由①:
所以
证毕
定理
(
证明:
首先:
其中
所以
再由上
接下来
有
由
再结合
中国剩余定理(CRT)
若
那么
其中
证明:
首先:对
再:
扩展中国剩余定理(exCRT)
若
最直观的:不求余中第一个注释处将不成立(
EX:
对于
转化为
则
由裴蜀定理
特解与通解:(exgcd)
所以
那么
也就是说,两个方程可以合并成一个方程:
合并
ExLucas(与Lucas无关)
求
其中
设
那么只需求
再用
考虑求
即
考虑到阶乘可能包含
即
其中
则再求
(分母那俩求逆元就行了)
考虑按是否是
对于后面一坨,考虑到
比如:
其中后半部分循环节可以掏掉一个
那么
前半部分是掏完模数的所有循环节,可以并成乘方,后半部分是剩的
所以
第一项要除掉,但第二项中可能还有
所以定义
回到原式,即求
接下来求
令
结合
so~
合并即可
容斥原理
奇数个集合交集个数的系数为正,偶数个集合交集个数的系数为负
这实在没法证就那样不断修正后就这样了
3.乘法逆元
定义:若 ,则 是 在模 意义下的乘法逆元,记为
使用:
方法 | 条件 | 时间复杂度 | 备注 |
---|---|---|---|
费马小定理 | 模数为素数 | ||
欧拉定理 | |||
扩展欧几里得 | 可以判断是否互质 | ||
线性递推 | 模数为素数 |
exgcd:求
Fermat:可知
即
则
Euler:类似于Fermat,
线性:对于质数
设
则
则
即
保证非负:
4.结论/引理
任意互质的 ,满足 的最小x一定是 的约数
证明:若不是,则有
由已知:
则有
进一步的:
又因为
又由式子a可得:
矛盾!
证明:
设
则
则
设
则
则
若 ,则
证明:
则
组合
常见策略
-
特殊位置(元素)优先
-
相邻元素整体法(注意整体内部的排序与组合)
-
不相邻问题插空法
-
定序问题倍缩法(总数 / 定序部分的全排列数)
-
排列问题求幂法
-
环排问题线排策略
一般的,
个元素做圆形排列,排法为 种从
个不同元素中选择 个元素排列,排法为 种 -
多排问题直排策略
-
混合问题先选(
)后排( ) -
平均分组问题除法策略
-
重排列(多部分定序)
-
隔板法:将
个物体分成 堆,每堆至少一个等价为:在
个间隔中插入 个隔板(分成 部分)允许堆空:
错位排序
Catalan数
定义
应用:
(1).(典例/特征)从 走到 ,且路径不超过对角线的路径总数为
证明:
路径总数:
对角线:
非法路径超过对角线,说明与
将该交点以后的路径关于
也就是说,所有非法路径其实就是从
那么合法路径就是
(2). 个元素进栈序列为 ,则出栈序列总数 =
将进栈抽象为走格子中向右走,出栈抽象为走格子中向上走,又因为一个元素进一次出一次,共
从
显然的卡特兰数
(3). 对括号,能够匹配的序列总数
一共
很显然,匹配的序列满足:任意一对括号中必有偶数个字符
我们选定一组括号作为分界,命名为括号
每一个括号
括号
比如:括号
那么
由于自变量是字符个数
形式决定本质:鉴定答案为
类似的想法还有
个节点的不同二叉树排列形式
非根结点总数
一个凸多边形(顶点数为 )划分成三角形区域的方法数
先选定一个三角形把多边形分成两部分,该三角形占用3个顶点,那么左右的多边形节点总数为
那么
总和为
总结: 数的运用场景
-
任取一个集合作为选定集合
,能将全集 (所有元素,大小为 )分成两个子集 ,且两子集的大小的和一定,设为 (具体数值依题而定) -
那么每一种分割情况对答案的贡献就是
-
对应答案就是
-
注意:
中的元素必须全部等价(括号和括号等价之类,不会受到元素性质影响),否则贡献成为典例:P2606 排列计数,由于排列受大小影响,所以前面的组合数无法消去
对应一下:
-
括号类型中,选定集合为一组(个)括号,剩余括号根据是否在选定括号内分成两个集合,并且由于每次的选定集合大小一定,所以这两个集合大小之和一定
-
二叉树的排列中,选定集合为根节点,剩余节点根据左右子树分为两个集合,且由于根节点只有一个,所以这两个集合大小之和一定
-
典例中的走格子也是,不计非法时的和为
,但是有一半的路径会被砍掉,和变成 ,又因为 属于边界条件算一次,所以和变为
Prufur序列
构造:
-
找到编号最小的叶子结点,将它的父节点计入序列
-
删去该叶子结点
-
重复上述过程直到剩下两个节点
如图
-
初始化一个点集为所有点
-
取出
序列最前面的元素 -
取出点集中不在
序列中的最小编号 -
连边,删去x,y
-
重复上述过程,在点集中最后剩下的两个点之中连一条边
如图
(还是以上图中的树为例)
性质:
-
一 一对应
-
度数为
的节点会在序列中出现 次
其中,一一对应(双射)是非常有用的一条性质,这个性质可以让我们对数列(而不是树)进行排列组合以获得方案数而且不用担心重复(一个序列只对应一棵树,序列不同,树一定不同)
应用:
- 无向完全图的生成树数量:
很好理解:
- 第
个节点的度数为 :
这就是一个重排列问题
如果有
又因为
实际中,却总有一些逆天情况
- 若干节点的度数没有限制
设有
设
把未知度数的节点视为一个整体,运用重排列得到方案数:
再考虑这个整体内部的方案数,由于无度数限制,直接随便排
BSGS
已知
的最小非负整数解
由扩展欧拉定理:
因为
设
则
先枚举
再枚举
斯特林数
第一类斯特林数:
组合意义:让
递推:
解释:对于一个人,可以让他单独占一张桌子,也可以先让剩下
第二类斯特林数:
组合意义:将
与前者区别:圆桌即圆排列,但盒子内没有次序
递推:
解释: 对于一个小球,可以让他单独占一个盒子,或者其他小球先放,他随便放入一个盒子
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端