注:该学习笔记参考了lxh daolao的课件和网上其他大佬的博客(然后加上了蒟蒻的yy),在此表示深深的感激!
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接。
PART1 数论部分
最大公约数
对于正整数x,y,最大的能同时整除它们的数称为最大公约数
常用的:\(lcm(x,y)=xy\gcd(x,y)\)
裴蜀定理
定理:对于方程\(ax+by=c\),其存在解的充要条件是\(gcd(a,b)|c\),可以拓展到n元的方程。
证明的话应该自己yy一下还是很容易(显然可得),不过要是想要严谨证明还是去百度吧qwq
扩展欧几里得定理
首先我们都知道\(gcd(a,b)=gcd(b,a \%b)\)吧。
我们在辗转相除的同时可以递归地求出\(ax+by=gcd(a,b)\)的解。当递归到b=0的时候,显然有解\(x=1,y=0\)。如果b!=0,我们可以递归的求出\(bx'+(a\%b)y'=gcd(a,b)\)的解。
\[bx'+(a\%b)y'=bx'+(a-\lfloor \frac{a}{b}\rfloor\times b)y'=ay'+b(x'-\lfloor\frac{a}{b}\rfloor y') \]
所以\(x=x',y=(x'- \lfloor \frac{a}{b} \rfloor y')\)
时间复杂度:O(log n)
逆元
定义:
若有\(xy=1\pmod p\),则称y为x模p意义下的乘法逆元
计算方法:
转换为方程:\(xy-kp=1\),用拓展欧几里得算法就可以了。当然费马小定理也可以,只不过时间复杂度上稍微逊色一些。(还有一种线性的,不过我不会)
补充:费马小定理:若p为质数,对于任意\(1<=a<p,a^{p-1}\equiv 1 \pmod p\),那么在p为质数的时候\(a^{p-2}就是a的逆元\)
积性函数
对于任意互质整数a,b,存在\(f(ab)=f(a)f(b)\)性质的数论函数。
完全积性函数则是没有互质的限制。
常见的积性函数举例:
- φ(n) -欧拉函数
- μ(n) -莫比乌斯函数,关于非平方数的质因子数目
- gcd(n,k) -最大公因子,当k固定的情况
- d(n) -n的正因子数目
- σ(n) -n的所有正因子之和
欧拉函数
定义:\(\phi(n)\)定义为1-n内与n互质的数的个数
\(\phi(x)=x\prod_1^n(1- \frac{1}{p_i}),其中x是正整数,\)p_i\(是x的质因数。 这个的计算程序十分好写。 特别的,欧拉函数是积性函数,即\)\phi(mn)=\phi(m)\phi(n)$。
证明比较显然。
欧拉筛(线性筛)
在埃氏筛法的基础上,让每个合数只被它的最小质因子筛选一次,以达到不重复的目的。
代码直接去看模板吧,没什么好说的。
欧拉定理&扩展欧拉定理
若\(a,m\)互质,则有\[a^{\phi(m)}\equiv1\pmod m\]
若\(a,m\)不互质,当\[b\ge\phi(m)的时候,a^b\equiv a^{b\%\phi(m)+\phi(m)}\pmod m\]
注意如果\(b<\phi(m)\)的时候,上式不一定成立。
证明请看这篇博客 戳我
什么时候休闲娱乐的话我会写一份自己的证明的(咕咕咕qwqwq)
Miller-Rabin素性测试
因为当p为质数且\(1<=a<p\)时,\(a^{p-1}\equiv 1\pmod p\)(欧拉定理)
那么当\(1\le a<p\)且\(a^{p-1}\equiv 1\pmod p\)时,p是否一定是质数呢?
当然不是啦!但是我们发现大部分合数都不满足这个性质。
所以我们的素数判定算法出世啦!随机几个a,判断\(a^{p-1}\mod p\)是否为1——不过这个正确性有点玄学,因为有些合数对任意的a的也都满足这个性质emmmmm,所以需要对算法进行改进。
这样就引出了我们的二次探测定理——
对于任意质数p,如果\(x^2\equiv1\pmod p\),那么我们有\(x\equiv\pm1\pmod p\)。
证明:由\(x^2 \equiv1\pmod p\),可以知道\((x+1)(x-1)\equiv0\pmod p\)。那么\((x+1)和(x-1)\)之中必定有至少一个是p的倍数。又由于p是质数,所以得证。
那么我们就知道怎么做了,在判定素数的时候如果指数p-1是偶数,我们可以继续判断\(a^{\frac{p-1}{2}}\)——如果\(a\equiv\pm 1\pmod p\)的条件不满足,可以直接判断此数为合数。如果\(a\equiv -1\pmod p\),就不继续判断,如果\(a\equiv 1\pmod p\),我们不能判断这个数是不是素数,就要继续判断\(a^{\frac{p-1}{2}}\)了。
所以我们把p-1的2的次幂分解出来,求出所有的\(a^{}\frac{p-1}{2^i}\)逐一检查。
算法时间复杂度是log的。
加上这个玄学改进,如果我们随机的a够多,几乎就卡不掉了。随机k个判断错误的概率仅有\(\frac{1}{4^k}\)。
Pollard-Rho大整数质因数分解算法
听说没有什么大用qwq???蒟蒻选择战略性放弃
![](/qrcode.jpg)
中国剩余定理(CRT)
exCRT
BSGS
求解同余方程:\(a^x \equiv b (mod p)\)
\(0<=a,b<p<=1e9\),p为质数5
BSGS
拓展BSGS
斐波那契数列循环节
原根
阶的定义:
设a,p是整数,a和p互素,那么:
使\(a^n\equiv1\pmod p\)成立的最小正整数n叫做a模p的阶。
原根的定义:
原根,是一个数学符号。设m是正整数,a是整数,若a模m的阶等于\(\phi\)(m),则称a为模m的一个原根。
原根的性质:
- 对于正整数x,只有\(x=2,4,p^a,2\times p^a\),p为奇素数,a>=1的时候才存在原根。
- \(a^1,a^2,a^3,...,a^{\phi(m)}\)在模p的时候都不相同(可以推得它构成了一个长度为\(\phi(m)\)的循环节)
- 对于m的原根g,满足gi(mod p)(0<=i<=p-2)与1到p-1一一对应.
- 若m有原根,那么它的原根个数为\(\phi(\phi(m))\)。(具体证明蒟蒻不是特别会qwq,上课没听懂)
对于m的情况最为常用。在这种情况下,0~m-1中每一个数都可以对应一个\(a^x\),这就相当于模意义下取对数(离散对数)。我们可以化乘为加。或者快速地计算一个数的若干次幂。
判断一个数a是不是m的原根
即判断是否不存在\(1<=x<\phi(m)\)。由于\(a^{\phi(m)}\equiv \pmod m\),我们只需要判断x为\(\phi(m)\)的因数的情况就可以了,时间复杂度\(O(sqrt(m)log m)\)
实际上,对于\(\phi(m)\)的每种质因数p_i判断\(\frac{\phi(m)}{p_i}\)也是等价的。
求出原根后,用暴力或者BSGS就可以求出来一个数的对数。
ps.一个数的原根是很多的,我们可以从小到大判断,或者随机化选取数字判断。
二次剩余
PART2 组合数学部分
PART3 线性代数部分
向量
n维向量可以看成n个数组成的n元组(或者说n个元素的数组)
几何意义:表示n维空间中的方向和长度
矩阵
\(n\times m\)的矩阵相当于一个\(n\times m\)的二维数组
练习题
BZOJ3667 题解戳我