数学笔记
整除
什么是整除,字面意思,比如 。
则 ,可以理解为 是 的倍数。
整除有几个性质:
且 ,则 。
证明显然,设 , 。
所以 。
假设 ,且 ,则
证明也很显然,两边同乘上 后都多了个 的因子。
且 , 则 。
和 都是 的倍数,右边可以写成 。
然后右边是个 的倍数。
设整数 和 满足 ,且 ,则
因为 ,两边同乘上 或者 还是成立的;
就有了 ,然后根据刚才证明的第 条性质:
又有了 ,提完公因数,发现里面的式子刚好为 。
证明完成。
其实这些东西你不会证明也没关系,因为你就算会证明你也不会用。
同余
还是字面意思。
可以理解为余数相同。
比如 ,则 。
同余有一些性质,两边同加,乘,幂依旧同余。
然后同余构成了一个关于这个余数的剩余系,为 。
然后对于负数,他也在这个剩余系里,那他是谁呢。
举个例子啊。
证明一下 :
证明完成?
素数和合数:
素数就是指只能被 和 他本身整除的数。
有三种筛素数的方法。
- 暴力筛
复杂度为
只筛到 是因为:
若 为合数,那他就可以表示成两个数的乘积的形式,,当你 确定的时候, 也确定了, 。
所以 在 , 就一定在 里。
所以说当你扫到 的时候, 和 就相当于交换了一下,没有意义。
给个代码:
bool Check(int x) { for(int i = 2; i * i <= x; i++) if(x % i == 0) return false; return true; }
- 埃氏筛
当你扫到一个数是素数的时候,他的倍数必然不是个素数,都标记上。
复杂度为 。
这玩意能过线性筛的模板,跑的比部分人写的线性筛还快
void Prime(int n) { vis[1] = 1; for(int i = 2; i <= n; i++) { if(vis[i]) continue; prime[++cnt] = i; for(int j = i; j <= n; j += i) { vis[j] = 1; } } }
- 线性筛
符合线性的条件就是让每个数都只被自己的最小质因数筛掉。
使每一个数都只筛一遍,这样复杂度就是 。
在筛的时候加上了一句话, 如果满足 就直接 。
为啥这样是对的呢。
当 ,这个时候就可以直接跳了。
设 ,那 。
我们设 ,所以说 就可以用 来表示,这样的话这个 会被筛到两次,所以我们只要在他被整除的时候直接跳出来就行了。
void Prime(int n) { vis[1] = 1; for(int i = 2; i <= n; i++) { if(!vis[i]) prime[++cnt] = i; for(int j = 1; j <= cnt && i * prime[j] <= n; j ++) { vis[i * prime[j]] = 1; if(i % prime[j] == 0) break; } } }
斐蜀定理:
又称为贝祖定理, 一个关于最大公约数的定理。
内容是:
设 不是全为 的整数, 一定有整数解。
证明: 自己看看?
这里口胡一下:
当 有一个为 时显然成立。
当 都不为 时,因为负数无影响,所以我们都看出正数。
设 。
。
然后用辗转相除不断的递归回来就证明完成了?
唯一分解定理:
任意一个大于 的自然数,都能被分解成有限个质数乘积的形式。
。
这里的 指的是质数, 是对应的指数。
这样的分解式被称为标准分解式。
唯一分解定理有两个性质:
-
唯一性
-
存在性
费马小定理:
若 为素数,且 ,则 。
威尔逊定理:
欧拉定理
若 为素数, 且 ,则
扩展欧拉定理:
最大公约数
若满足 ,且没有一个比 还大的数满足这个条件,那我们称 为 和 的最大公约数。
记作 。
若满足 ,且没有一个比 还小的数满足这个条件,那我们称 为 和 的最小公倍数。
记作 。
有一个性质:
。
证明一下:
设
那么 ,同时
那么 。
证明完毕。
怎么求这个最大公约数呢?
- 辗转相除法
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }
证明 :
也就是证明 。
于是我们转换成证明 个东西:
是 的公约数。
证明:设 ,则 。
,。
,所以 也有这个公约数,而 也有。
所以得证。
并且这个公约数是最大公约数。
证明这个也就是证明 和 没有比 还大的公约数,也就是 和 互质。
正难则反,我们采用反证法:
我们假设 和 有公约数。
所以假设 。
,。
因为 ,所以 。
,所以 。
所以 不满足条件,与 矛盾,证明成功。
扩展欧几里得算法
是一种求解 的 解法。
根据贝祖定理,一定有解。
。
所以 。
- 求通解:
也就是求
假设我们已经求出 。
设 , 所以 。
。
。
对于任意的 , 一定有:
化简一下就是
显然正确。
因为我们找到是整数解,因为 。
所以我们要让 。
最小时显然为 。
所以 。
通解的形式变成了 。
(其中 )
乘法逆元
如果说 ,那么称 是 关于 的乘法逆元。
记作 。
逆元一般用来处理 的问题。
设 ,则 。
证明:
如何求逆元?
发现 可以写成 ,这个式子可以用 求解。
最后解出来的 就是逆元。
费马小定理:
若 为素数, ,。
。
所以 即为逆元。
线性递推逆元。
求出 的逆元。
设 。
,所以 。
两边同时减去 , 。
两边同时除以 , 得到 。
因为 。
所以 。
然后将 用 替换了,。
为了防止出现负数,再加上一个 ,于是变成了 。
于是就可以线性递推了。
高斯约旦消元法
中国剩余定理 (CRT)
求解 (满足 两两互质)。
构造一组解满足条件。
设 ,。
则 ,则 关于 的逆元 存在。
所以
两边同时乘上 ,得到:。
所以最后的解为 。
显然对于每一组都成立。
扩展中国剩余定理 (EXCRT)
和中国剩余定理没有什么关系。
本质上是合并同余方程组。
求解 。
设 为前 个方程的解。
则 为前 个方程的通解。
我们要求一个 满足前 个方程组的通解,并且也满足第 个方程。
设 。
第 个方程为 。
带入进去 : 。
。
然后这个式子可以写成: 。
。
这个式子形如 ,所以可以用 求出 从而求出 来。
然后不断的合并就行了。
Miller_Rabin 素数测试
一种快速的测试一个数是否是质数的方法。
矩阵
欧拉函数:
表示
中与 互质的数的个数。
若 为质数,则
- 证明
在 的数中,与 不互质的数一定可以写成一个集合
我们只需要求出最大的 即可知道与 不互质的数的个数。
因为 ,所以与 不互质的数的个数有 个。
所以 。
得证。
如果 为质数,则 。
- 证明
由第一条性质得证:当 时。
当然也可以感性理解: 是一个质数,所以从 里
都与 互质。
函数是一个积性函数,也就是说如果 ,则 。
- 证明
与 互质的数集为 ,则在 的范围内与 互质的数可以写成 。
咕咕咕
线性筛欧拉函数:
p 指素数。
-
性质 :
-
性质 :
证明一下:设 为
设 ,所以
因为 ,所以
里与 不互质的数的个数为
与 不互质的数的个数为 。
因为 ,所以 的因子都相同。
所以
- 性质 :
鸽巢定理:
有 个抽屉,有 个物品,你要将这 个物品放到这 个抽屉里,至少有一个抽屉有 个及其以上个数的物品,同理,当你有 个物品的时候,有一个抽屉会是空的。
证明:
如果想让每个抽屉中的物品个数尽量少,就要将这些物品平摊到这些抽屉中,所以当 个物品分别放到 个抽屉里的时候,最后一个物品一定会放到一个已经有一个物品的抽屉里了,当 个物品不平摊的时候就更不用说了, 个物品的时候同理可证。
来个例题:
你有一个边长为 的等边三角形,要在这里面放 个点,可以放到三角形的订点上,求证:至少存在两个点满足两点之间的距离 。
证明:
我们可以将这个边长为 的等边三角形分为 个边长为 的等边三角形,然后问题也就转换为了有 个抽屉,有 个物品,将这 个物品放到 个抽屉中,当两个物品在同一个抽屉里距离,所以问题可证成立。
分类加法、乘法计数原理:
比如你有一个事件 和 ,然后 完成的方式有 种, 完成的方式有 种, 或 发生的方案数是 , 与 同时发生的方案数为 。
大概说的通俗一点就是:
假如我是小明,我要去 站,有 种火车票, 种飞机票,我到 站的方案数就是 。
然后再假设我是小红,我用去 站,不过中途必须经过 站,小红到 站有 种方案,从 站到 站又有 种情况,那么小红到 站的方案数为 。
DeMorgan 定理
我不会用 ,所以这里我们用 来表示 的补集,假设 是全集 的两个子集,那么 为 , 为 。
证明还是比较简单。
具体画个维恩图就会了吧。
然后这个东西是可以推广到有 个子集的。
容斥原理
你有一个有限集为 ,有 条性质,分别是 , 中的任意一个子集可能对其性质满足 条,我们设 表示满足第 条性质的集合, 的集合中元素的个数为 。
则满足两条性质:
看起来式子挺长,其实就是将重复的部分减去来达到不重不漏罢了。
仔细想一想就能明白。
稳定婚姻问题
形象一点的描述,假设你是一个红娘,你要给 个男子和女子配对,每个男子在每个女子心中都有排名,每个女子在每个男子心中也有一个排名。
如果 和 已经配对了,但是 和 同时发现还有比现在的对象更符合自己的,于是两人一拍而合,离!然后这对婚姻就不稳定了。
虽然对两个人都有好处,但是他们离婚会影响你的业绩,所以你要配对的时候尽量满足一种情况,虽然男子有更心仪的女子,但他现在的女子认为该男子就是她最好的配偶,男子想离都没法离,女的根本就不撒手。
是不是十分通俗易懂
当然稳定婚姻的情况肯定是不只有一种情况。
给定你 个男生和 个女生,然后给出每个异性在自己心中的排名,求出一种稳定婚姻。
具体实现也就是用 算法,我们对于每个未婚的男性,让其向自己的求婚名单上现存最喜欢的女生求婚,不管女生是已婚还是未婚,如果女生能够同意,就结婚,否则男生的求婚名单上就把该女生划了。
然后这题和上面说到的算法没有关系,用的是匈牙利算法,对于每一个男生,我都对于每个女生枚举一遍呢,当这个女生每对象就直接结婚,要是有对象同时她的对象还能喜欢其他女生并且那个女生没有对象,当然也有可能那女生的对象还喜欢其他人并且那个人没结婚,所以就递归实现即可。
AC code :
/* work by: TLE_Automation Time: O(TLE) knowledge: */ #include<bits/stdc++.h> using namespace std; const int maxn = 3e6; const int MAXN = 3e3; inline int read() { int s = 0, w = 1; char ch = getchar(); while (!isdigit(ch)) {if(ch == '-') {w = -1;}ch = getchar();} while (isdigit(ch)) {s = (s << 1) + (s << 3) + (ch ^ 48);ch = getchar();} return s * w; } int ans = 0, n, m, t; int result[maxn]; int Map[MAXN][MAXN]; bool vis[maxn]; bool dfs(int x){ for(int i = 1; i <= m; i++) { if(Map[x][i] && !vis[i]) { vis[i] = true; if(!result[i] || dfs(result[i])) { result[i] = x; return true; } } }return false; } signed main() { n = read(), m = read(), t = read(); for(int u, v; t; t--) { u = read(), v = read(); Map[u][v] = true; } for(int i = 1; i <= n; i++) { memset(vis, false, sizeof vis); if(dfs(i)) ans++; } print(ans); }
组合数学
卢卡斯定理
数论分块
咕咕咕
莫比乌斯反演
咕咕咕
博弈论
咕咕咕
本文作者:TLE_Automation
本文链接:https://www.cnblogs.com/tttttttle/p/16335789.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现