前置数学
一些必要 trick#
- 推式子,先提
和 到最前面,然后从后往前合并,必要时考虑更改 的取值 - 看到次方变为斯特林数,
- 注意莫反、欧反的形式
前置数学知识#
函数#
指数函数#
对数函数#
离散数学#
集合#
空集
映射#
- 两个集合中每一个元素都有相对应的元素,称为满射。
- 两个集合中其中两个元素仅与另一个元素对应,称为单射。
- 两个集合中所有元素一一对应,称为一一映射(双射)。
- 两个集合等势,即可形成一一映射(双射)。
例: 与 等势。
数列#
- 等差数列:
- 等比数列:
数论#
最大公约数#
最小公倍数#
裴蜀定理#
- 内容:设
是不全为零的整数,对任意整数 ,满足 ,且存在整数 , 使得 . - 逆定理:设
是不全为零的整数,如果 是 的公因数,且存在整数 ,使得 ,那么 就是最大公因数 - 推广:设
是不全为零的整数,一定存在整数 ,使得 - 推论:方程
, 时总有解, 是最大无解情况 - 裴蜀定理进一步结论:
若 ,对于方程 ,设 ,则 中有且仅有一个有非负数解,且有如下关系:
有非负数解 | |
---|---|
欧几里得引理(Euclid's lemma)
- 内容
.
证明
由裴蜀定理得
拓展欧几里得#
根据以下两个定理,可以求出线性同余方程
定理 1:线性同余方程
其中 x 和 k 是未知数。这两个方程是等价的,有整数解的充要条件为
应用扩展欧几里德算法可以求解该线性不定方程。根据定理 1,对于线性不定方程
于是找到方程的一个解。
定理 2:若
并且对任意整数
根据定理 2,可以从已求出的一个解,求出方程的所有解。实际问题中,往往要求出一个最小整数解,也就是一个特解
其中有
如果仔细考虑,用扩展欧几里得算法求解与用逆元求解,两种方法是等价的。
这里的
求解
第
扩展欧几里得算法可以写成:
唯一分解定理#
- 内容
任意一个正整数 ,必然有且仅有一种形如 的分解方法,其中, , 为正整数, .
证明
设
则
所以
欧拉筛#
欧拉函数
- 定义
- 计算公式
同余类#
模
剩余系#
从构成
完全剩余系,最小剩余系和简约剩余系#
完全剩余系是从构成
如果里面的每个元素都是该同余类中最小的非负整数,称它为最小剩余系.(
将完全剩余系中去掉与模
完全剩余系的性质#
- 内容
若 是 的一个完全剩余系,且 ,则 也是 的一个完全剩余系.
同余#
费马小定理#
其中第一行需要
欧拉函数#
欧拉函数(Euler's totient function),即
例如
性质
证明
证明
证明
用法
举个栗子:The Euler function
题意:求
如果枚举必定
方法一:
用埃氏筛,由欧拉函数的展开式
对于筛出的每个质数
时间复杂度
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
template<typename P>
inline void read(P &x){
P res=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
res=res*10+ch-'0';
ch=getchar();
}
x=res*f;
}
using namespace std;
const int N=3000005;
int a[N],b[N],tot=1,maxn;
int phi[N];
void initprime(int n){
for(int i=2;i<=n;i++) phi[i]=(int)i;
for(int i=2;i<=n;i++) if(phi[i]==(int)i)
for(int j=i;j<=n;j+=i) phi[j]/=(int)i,phi[j]*=(int)(i-1);
for(int i=1;i<=n;i++) phi[i]+=phi[i-1];
}
signed main(){
auto solve=[&](){
while(scanf("%d%d",&a[tot],&b[tot])!=EOF) maxn=max(maxn,b[tot]),tot++;
initprime(maxn);
for(int i=1;i<tot;i++) printf("%lld\n",phi[b[i]]-phi[a[i]-1]);
return;
};
return 0;
}
方法二自己搜,不想写了。
欧拉定理#
当
乘法逆元#
如果一个线性同余方程
- 扩展欧几里得法
void exgcd(int a, int b, int& x, int& y) {
if (b == 0) {
x = 1, y = 0;
return;
}
exgcd(b, a % b, y, x);
y -= a / b * x;
}
扩展欧几里得法和求解线性同余方程是一个原理,在这里不展开解释。
- 快速幂法
因为
所以
所以
int qpow(long long a, int b) {
int ans = 1;
a = (a % p + p) % p;
for (; b; b >>= 1) {
if (b & 1) ans = (a * ans) % p;
a = (a * a) % p;
}
return ans;
}
注意:快速幂法使用了 费马小定理,要求
约数数量#
约数和#
容斥原理#
排列组合#
- 定义:
从 个数中选 个数考虑顺序组合方法数:
- 定义:
从 个数中选 个数不考虑顺序组合方法数:
卡特兰数#
该递推关系的解为:
关于 Catalan 数的常见公式:
二项式定理#
在进入排列组合进阶篇之前,我们先介绍一个与组合数密切相关的定理——二项式定理。
二项式定理阐明了一个展开式的系数:
证明可以采用数学归纳法,利用
二项式定理也可以很容易扩展为多项式的形式:
设
满足的非负整数解
其中的
第二类斯特林数#
- 定义:
将n个不同的元素拆分成m个集合的方案数,记为:
- 性质:
复数#
概率与期望#
概率#
- 概率一般用
表示 - 性质:
1.单调性:
2.容斥原理:
3.
期望#
- 期望一般用
表示 - 性质:
1.线性性:若随机变量
对任意实数
2.随机变量乘积的期望
若随机变量
注意:上述性质中的独立性 并非 必要条件。
期望与概率的转化#
对于随机事件
根据定义可以求得其期望
方差#
定义
设随机变量
也存在,则称上式的值为随机变量
方差的性质
若随机变量
对任意常数
协方差与相关系数
一般来说,等式
对于第一个问题,我们引入协方差作为解答。
协方差的定义#
对于随机变量
为
协方差的性质
对于随机变量
对任意常数
同时协方差与方差也有如下联系:
对于刚才提出的第二个问题,不难看出
但这个条件并不是充分的。为了描述满足
平面向量#
-
意义:
表示为一条有长度的线段,通常表示移动一段距离,通常形式为
表示为向量 的距离(或长度)
如上图中,能得出向量加减定则
-
乘法定则
运用:例,求
数学万恶之源
作者:God_Max_Me
出处:https://www.cnblogs.com/lizihan00787/p/18685873
版权:本作品采用「God_Max_Me-非商业性使用」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!