【专题总结】数学(未完)
【专题总结】数学(未完)
前言
老年人的一些整理。。(复习用)
本文用\((x,y)\)表示\(gcd(x,y)\)
完全剩余系
1.从模 \(n\) 的每个剩余类中各取一个数,得到一个由 \(n\) 个数组成的集合,叫做模 \(n\) 的一个完全剩余系。完全剩余系常用于数论中存在性证明。
2.对于 \(n\) 个整数,其构成模n的完系等价于其关于模 \(n\) 两两不同余
3.若 \(a_i(1\leq i\leq n)\) 构成模 \(n\) 的完系,\(k,m\in Z\) , \((n,m)=1\) ,则 \(k+m\cdot a_i\) 也构成完系。【NOIP2017】小凯的疑惑
4.若 \(a_i(1\leq i\leq n)\) 构成模 \(n\) 的完系,则 \(\sum_{i=1}^{n}a_i\) 。
快速幂
code
LL qpow(LL x,LL y,LL P){
LL re=1;
while(y){
if(y&1) re=re*x%P;
x=x*x%P;y>>=1;
}
return re%P;
}
素数定理
1.设 \(x>0\) ,以 \(\pi(x)\) 表示不超过 \(x\) 的素数个数,当 \(x \rightarrow +\infty\) 时,\(\pi(x) \rightarrow Li(x)\) 或 \(\pi(x) \rightarrow \frac{x}{ln(x)}\)
2.各范围素数数量
威尔逊定理
- \((p-1)!\) \(\equiv\) \(p-1\) \((mod\) \(p)\) ( \(p\) 是质数)
线性筛
1.效率是 \(O(n)\) 的,并且每个合数只会被其最小的质因数筛到。
code
bool is_pri[N+10];
int pri[N],cntp=0;
void init_pri(){
for(int i=2;i<=N;++i){
if(!is_pri[i]) {
pri[++cntp]=i;
}
for(int j=1;j<=cntp&&pri[j]*i<=N;++j){
is_pri[pri[j]*i]=1;
if(i%pri[j]==0) {
break;
}
}
}
}
乘法逆元
1.线性求逆元:令 \(p=k*i+r\) \((p是质数,k=\lfloor \frac{p}{i} \rfloor)\) ,显然 \(k*i+r\equiv0(mod\) \(p)\) , 移项得 \(i^{-1}\equiv(-k)\cdot r^{-1}(mod\) \(p)\)
code
LL inv[N+10];
void init_inv(){
inv[0]=inv[1]=1;
for(LL i=2;i<=N;++i) inv[i]=(P-P/i)*inv[P%i]%P;
}
2.快速幂求逆元:由费马小定理 \(a^{p-1}\equiv1(mod\) \(p)\) ,得 \(a^{p-2}\equiv a^{-1}(mod\) \(p)\)
3.扩展欧几里得求逆元。(用于模数不是质数的时候。。在一些很绕的数论题会用到)
最大公约数
1.首先是欧几里得算法。。这是用来算最大公约数的算法QAQ
2.原理:\((a,b)=(b,a-k*b)\)
3.模板:
LL gcd(LL a,LL b){
return b?gcd(b,a%b):a;
}
4.更相减损法。简单来说除去\(2^x\)的约数后,只通过减法和除2的方法来算,原理跟欧几里得一样。
#define ctz __builtin_ctz
int gcd(int a,int b){
if(!a||!b)return a|b;
int t=ctz(a|b);
a>>=ctz(a);
do{
b>>=ctz(b);
if(a>b)swap(a,b);
b-=a;
}while(b);
return a<<t;
}
5.扩展欧几里得算法。
在求最大公约数的同时可以解二元方程\(ax+by=(a,b)\)
根据\((a,b)=(b,a-b\lfloor \frac{a}{b} \rfloor)\),于是存在\(bx'+(a-b\lfloor \frac{a}{b} \rfloor)y'=(a,b)\)
两个式子联立即有\(a(x-y')+b(y-(x'-y'\lfloor \frac{a}{b} \rfloor))=0\)
显然有特解\(x=y',y=x'-y'\lfloor \frac{a}{b} \rfloor\) ,递归处理即可
void exgcd(LL a,LL b,LL &d,LL &x,LL &y){
if(!b){d=a;x=1;y=0;return;}
exgcd(b,a%b,d,y,x);
y-=(LL)(a/b)*x;
return;
}
中国剩余定理和扩展
1.对若干个模线性方程求最小非负整数解。
2.每个方程形如\(x≡a_i (mod m_i)\)
3.中国剩余定理。
当每个\(m_i\)互质时,令\(M_i=\displaystyle \frac{\prod{m_j}}{m_i}\)
再令\(k_i\)满足\(k_iM_i≡1 (mod m_i)\)
于是答案就是\(x≡\sum{a_ik_iM_i}(mod (\prod{m_j}))\)
因为不保证\(m_i\)是质数,求\(k_i\)需要用扩欧来求逆元
4.扩展中国剩余定理。
本质上我们就是要能合并两个模线性方程。。设为\(x≡a_0(mod m_0)\)和\(x≡a_1(mod m_1)\)
显然两个式子可以联立\(a_0+k_0m_0=a_1+k_1m_1\)
移项\(k_1m_1-k_0m_0=a_0-a_1\)
左边的式子很像二元一次方程的形式。。令\(Xm_1+Ym_0=(m_1,m_0)\),这个可以用exgcd来解。
显然如果存在整数\(k_2\)使得\(a_0-a_1=k_2(m_1,m_0)\),则有解。
令\(x=a_1+k_2Xm_1\),于是我们得到合并后的方程\(x=a_1+k_2Xm_1 (mod (lcm(m_0,m_1)))\)
很多时候数据范围会到达1e18级别,这个时候乘法取模要用龟速乘或者O(1)的快速乘。
bool EXCRT(LL &m0,LL &a0,LL m1,LL a1){
LL g,X,Y,Z,k;
exgcd(m1,m0,g,X,Y);
Z=a0-a1;
if(Z%g==0){
k=Z/g;
m0=m0/g*m1;
a0=((a1+mul(mul(m1,X,m0),k,m0))%m0+m0)%m0;
return 1;
}
else return 0;
}
排列组合(部分公式)
1.\({n \choose m}\) \(=\) \(\frac {n!}{m!(n-m)!}\)
2.\({n \choose m}\) \(=\) \({n-1 \choose m-1}\) + \({n-1 \choose m}\)
3.\(\sum_{i=0}^{n}{n \choose i}\) \(=\) \(2^{n}\)
4.\(\sum_{i}{n \choose i}{m \choose k-i}\) \(=\) \({n+m \choose k}\) 在 \(n\) 个中选 \(i\) 个,再在另外 \(m\) 个中选剩余 \(k-i\) 个,每种 \(i\) 的情况加起来,相当于是在 \(n+m\) 中选 \(k\) 个。
5.\(\sum_{i}{i \choose k}{n-i \choose m-k}\) \(=\) \({n+1 \choose m+1}\) 相当于在 \(n+1\) 个中取 \(m+1\) 个,然后对于每个 \(i\) 就对应着将选出的第 \(k+1\) 个点当做分割点后得到的方案。
6.\(\sum_{i=0}^{x-1}{k+i \choose i}\) \(=\) \({k+x \choose k+1}\) 国庆校考的时候用到的式子,当时是oeis出来的,不会证明,但还是记一下吧。
7.李善兰恒等式(感觉没什么用。。)
欧拉函数
1.介绍先略了吧
2.\(\phi(xy)\) \(=\) \(\frac{\phi(x) \phi(y) (x,y)}{\phi((x,y))}\)
概率与期望
1.这种题一般都是计数题QAQ
2.树上随机游走问题
a.随机游走的情况下,一个点到其父亲期望步数。
首先设\(d_i\)表示点\(i\)的度数,\(F_i\)为一个点到父亲期望步数。
\(F_i\) \(=\) \(\frac{\displaystyle 1 + \sum_{j是i的儿子}{(F_j+F_i+1)}}{d_i}\)
化简得:\(F_i\) \(=\) \(\displaystyle d_i + \sum_{j是i的儿子}{F_j}\)
再进一步推导:\(F_i\) \(=\) \(2size_i-1\),size表示子树大小
b.其他情况可以用类似方法推。。
一些比赛遇到的奇怪式子
1.\(y^{d(y)}\) \(=\) \(\prod_{t|y} y\) \(=\) \(\prod_{t|y} t \cdot \frac{y}{t}\) \(=\) \(\prod_{t|y} t^{2}\)
2.\(\sigma_{0}(xy)\) \(=\) \(\sum_{i|x}{\sum_{j|y}{[(i,j)=1]}}\) (\(\sigma_{k}\)表示约数的k次方和)