数论基础
一、基础概念(略)#
质数
约数
同余
二、质数#
A.质数筛法#
暴力筛(略)#
埃筛()#
inline void prim(int limit) {//埃筛
vis[1] = 1;
for (int i = 2;i <= limit; ++i) {
if (!vis[i]) {
prims[++p_cnt] = i;
for (int j = i * i;j <= limit; j += i) vis[j] = 1;
}
}
}
欧筛()#
inline void ola_prim(int limit) {//欧筛
vis[1] = 1;
for (int i = 2;i <= limit; ++i) {
if (!vis[i]) {
vis[i] = i;
prims[++p_cnt] = i;
}
for (int j = 1;j <= p_cnt; ++j) {
if (prims[j] > vis[i] || prims[j] > limit / i) break;
vis[i * prims[j]] = prims[j];
}
}
}
三、约数与同余#
A.欧几里得算法#
数学归纳法可推广到一般。
B.裴蜀定理#
描述:
如果任意整数和不都为,则是与的线性组合集中的最小正元素。
证明:
设是线性组合集中的最小正元素,。
所以必存在一组使得。
所以
因此也是与的一个线性组合。
由于是这个线性组合中最小正数,所以。即,同理,,所以。
因为和,所以。
即。
得证。
C.扩展欧几里得算法#
四、组合计数#
A.加法和乘法原理#
加法原理:做一件事情,完成它有类方式,第一类方式有种方法,第二类方式有种方法,…,第类方式有种方法,那么完成这件事情共有种方法。
乘法原理:做一件事,完成它需要分成个步骤,做第一步有种不同的方法,做第二步有种不同的方法,……,做第步有种不同的方法。那么完成这件事共有 种不同的方法。
B.排列组合公式#
全排列:
组合数:
性质:
- (根据意义去思考)
C.二项式定理#
可用数学归纳法证明。
D.容斥原理#
交集相加减得并集。
E.斯特林数#
- 第一类斯特林数:个不同元素构成个圆排列的数目。
- 第二类斯特林数:个不同的元素拆分成个集合的方案数。
- 贝尔数:集合划分的方案数。
F.康托展开#
:当前位置往后比当前位置数小的个数,可用树状数组求。
补充
进制转换(略)#
球盒问题#
有个球,个盒,求满足放置条件的方案数。
编号 | 球相同 | 盒相同 | 盒可为空 | 计算 |
---|---|---|---|---|
× | √ | × | ||
× | √ | √ | ||
× | × | × | ||
× | × | √ | ||
√ | √ | × | ||
√ | √ | √ | ||
√ | × | × | ||
√ | × | √ | ||
说明: |
表中指的是第二斯特林数。
递推式:。
同时,贝尔数。
情况和的递推式:。
简要分析如下:
- 个不同的元素拆分成个集合的方案数,等同于第二斯特林数。
- 允许出现空集,所以求和。
- 容斥原理做,或者可以理解为因为盒子不同,所以直接乘上盒子的排列。
- 最好理解:每个球有种放法。
- 这个问题等效成把一个数n拆成m个数,且先拆出的数不小于后拆出的数(避免重复情况)。如果这么拆:。当时,后面的拆法表示成。当时,式子可以变成。所以后面的拆法表示成。所以得到递推式。
- 在情况下,每盒先放一个。
- 插板问题。
- 同插板问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!