数论
(本篇博客大部分内容都会在讲证明(也许不够严谨),要想看代码实现的请点击这里)
目录
- 数论基础
一些定义
性质
- 费马小定理
定理内容
证明
- 欧几里得算法(gcd)
定理内容&证明
扩展欧几里得算法(exgcd)
定理内容&证明
- 欧拉函数
定义
通项公式
性质
- 莫比乌斯函数
定义
性质
莫比乌斯反演
- 筛法
质数筛法
暴力筛
埃氏筛法
线筛
欧拉函数线性筛
莫比乌斯函数线性筛
逆元线性筛
- Baby-Step-Giant-Step(大步小步算法)
exbsgs(扩展bsgs)
- 中国剩余定理(crt)
扩展中国剩余定理(excrt)
- Lucas定理
扩展Lucas定理(exlucas)
- 杜教筛
数论基础
质数
定义:因数只有1和它本身的数(1不算质数)
取模
两数相除的余数(如7对4取模=3,一般用 $mod$ 或 % 表示取模)%清华学姐clz
取模与乘除运算优先级同级
整除
如果a除b(注意是除不是除以)能得到一个整数,则称a整除b,记作a|b
同余
如果两个整数a,b满足一个模数m|a-b,则称整数a与b对模m同余,记作 $a$ $\equiv$ $b$ $\pmod{m}$
最大公因数
几个数中最大的公因数就是最大公因数,记作$gcd(a,b)$,也可记作$(a,b)$
$gcd(a_{1},a_{2},a_{3}.....a_{n})$ $=$ $gcd(gcd(gcd(gcd(a_{1},a_{2}),a_{3}),a_{4})..........,a_{n})$
最小公倍数
几个数中最小的公倍数就是最小公倍数,记作$lcm(a,b)$
易证两个数的最小公倍数 $=$ 它们的乘积除以最大公因数
互质
指两数最小公倍数为1
阶乘
$1 \times 2 \times .... \times n = \prod_{i=1}^{n}i = n!$
性质
$(a$ $+$ $b)$ $mod$ $m$ $=$ $a$ $mod$ $m$ $+$ $b$ $mod$ $m$
$a$ $\cdot$ $b$ $mod$ $m$ $=$ $(a$ $mod$ $m)$ $\cdot$ $(b$ $mod$ $m)$
$a$ $-$ $b$ $mod$ $m$ $=$ $a$ $mod$ $m$ $-$ $b$ $mod m$ (注意大部分语言的%之后会是负的:如-11 % 4 = -3,所以大部分时候要把(得出的答案+模数)% 模数
(以上三条性质易证)
$a$ $\div$ $b$ $mod$ $m$ 不一定等于 $a$ $mod$ $m$ $\div$ $(b$ $mod$ $m)$
为什么呢?
因为除法默认下取整,所以直接模会有问题
所以再引入一个东西
逆元
如果一个整数x满足$a$ $\cdot$ $x$ $\equiv$ $1$ $\pmod{m}$ ,则称x是a关于模m的逆,一般记作$a^{-1}$
逆元是广义化了的倒数
所以在模运算中,除以一个数相当于乘这个数的逆元
对于整数a,m逆元存在当且仅当 $gcd(a,m)$ $=$ $1$
必要性证明
反证法:设 $d$ $=$ $gcd(a,m)$ $>$ $1$ ,$b \cdot d = a$,$n \cdot d = m$,且 $b,n$ $\in$ $\mathbb{Z}$
$\because$ $a$ $\cdot$ $x$ $=$ $1$ $\pmod{m}$
$\therefore$ $a$ $\cdot$ $x$ $+$ $k$ $\cdot$ $m$ $=$ $1$, $k$ $\in$ $\mathbb{Z}$
$\therefore$ $d$ $\cdot$ $($ $b$ $\cdot$ $x$ $+$ $n$ $\times$ $k$ $)$ $=$ $1$
设$A$ $=$ $b$ $\cdot$ $x$ $+$ $n$ $\cdot$ $k$,显然$A$ $\in$ $\mathbb{Z}$
$\therefore$ $A$ $=$ $\frac{1}{d}$
$\therefore$ $d$ $>$ $1$
$\therefore$ $A$ $=$ $d$ $\notin$ $\mathbb{Z}$
这与 $A$ $\in$ $\mathbb{Z}$ 矛盾
$\therefore$ 当逆元存在时,$gcd(1,m)$ $=$ $1$
充分性证明详见后面的扩展欧几里得的证明
数学用语
存在$\exists$,所有的/任意的$\forall$,质数集$\mathbb{P}$,自然数集$\mathbb{N}$,整数集$\mathbb{Z}$,有理数集$\mathbb{Q}$,实数集$\mathbb{R}$,复数集$\mathbb{C}$ 女装QRC(NZQRC)
属于$\in$,不属于$\notin$
(不懂得稍微百度一下?)
费马小定理
讲了那么多,那么到底怎么求逆元呢?
定理内容
如果对于a,p,$a$ $\in$ $\mathbb{Z}$,$p$ $\in$ $\mathbb{P}$(质数集),$gcd(a,p)$ $=$ $1$ (等价于a不是p的倍数),则$a^{p-1}$ = $1$
$a^{p-2}$ $\times$ $a$ $=$ $1$
$a^{p-2}$ 即为a的逆元
下面给出证明
证明
引理1:如果 $a \cdot c \equiv b \cdot c \pmod m$ ,且 $(c,m) = 1$ ,则$a \equiv b \pmod m$
$\because a \cdot c \equiv b \cdot c \pmod m$
$\therefore a \cdot c - b \cdot c \equiv 0 \pmod m$
$\therefore (a - b) \cdot c \equiv 0 \pmod m$
$\because (c,m) = 1$
$\therefore$ 存在c的逆元
$\therefore$ 两边同时乘上 $c^{-1}$
$\therefore a - b \equiv 0 \pmod m$
$\therefore a \equiv b \pmod m$
引理2:定义对于数列A,满足A的大小为m且对于$\forall i,j ( i \neq j)$满足$a_{i} \not\equiv a_{j} \pmod m$,则称A构成模m的完全剩余系
当$a_{0},a_{1},.....,a_{m-1}$构成模m的完全剩余系,$b \in \mathbb{Z}$,$(b,m) = 1$,则$b \cdot a_{0},b \cdot a_{1},.......,b \cdot a_{m-1}$也构成模m的完全剩余系
反证法
若$b \cdot a_{0},b \cdot a_{1},.......,b \cdot a_{m-1}$不构成模m的完全剩余系,则$\exists i,j (i \neq j)$满足$b \cdot a_{i} \equiv b \cdot a_{j} \pmod m$
$\therefore$ 根据引理1,$a_{i} \equiv a_{j} \pmod m$
这与完全剩余系的定义相矛盾
$\therefore$ 引理2得证
引理3:若$A =$ {$0,a_{1},a_{2},....,a_{m-1}$},$B =$ {$0,b_{1},b_{2},....,b_{m-1}$}分别构成模m的剩余系,则$a_{1} \cdot a_{2} \cdot .... \cdot a_{m-1} \equiv b_{1} \cdot b_{2} \cdot .... \cdot b_{m-1} \pmod m$
因为A是模m的完全剩余系
所以对于每个i,$a_{i} \equiv$ 1~m-1的一个不同的数
B同理
所以对于每个i,都有不同的j使得$a_{i} \equiv b_{j} \pmod m$
所以设排列C使得$a_{i} \equiv b_{c_{i}} \pmod m$
所以$a_{1} \cdot a_{2} \cdot .... \cdot a_{m-1} \equiv b_{c_{1}} \cdot b_{c_{2}} \cdot ... \cdot b_{c_{m-1}} \pmod m$
所以$a_{1} \cdot a_{2} \cdot .... \cdot a_{m-1} \equiv b_{1} \cdot b_{2} \cdot .... \cdot b_{m-1} \pmod m$
我们构造一个模m的剩余系{$0,1,2,3,...,m-1$}
根据引理2,{$0,a,2a,3a,....,(m-1)a$}也是模m的剩余系
根据引理3,$1 \times 2 \times .... \times (m-1) \equiv a \cdot 2a \cdot ... \cdot (m-1)a \pmod m$
$\therefore 1 \times 2 \times .... \times (m-1) \equiv (1 \times 2 \times .... \times (m-1)) \cdot a^{p-1} \pmod m$
显然$1 \times 2 \times .... \times (m-1)$与m互质
$\therefore$ 根据引理1,$a^{p-1} \equiv 1 \pmod m$
得证
复杂度&主要代码实现
快速幂
时间:O($\log_2m$)
空间:O(1)
条件:模数m为质数,$(a,m) = 1$
欧几里得算法(exgcd)
这时候就有人要说了:
“哎呀,费马小定理好菜啊,只能求模数为质数的情况”
别急,下面就给出模数不为质数的情况
定理内容
设整数a>整数b,则
$gcd(a,b) = \begin{cases}
a & \text{ } b = 0\\
gcd(b,a \mod b) & \text{ } b \neq 0
\end{cases}$
证明
当b = 0时显然
当$b \neq 0$时,设$a = k \cdot b + r$,$k,r \in \mathbb{Z}$,$|r| \leq |b|$
则$r = k \cdot b - a$,$a \mod b = r$
设d为a,b的任意一个公因数,即d|a且d|b
则$r / d = k \cdot b / d - a / d$
显然等式右边是个整数,则等式左边也是个整数,即d|r
显然对于任意的一个r和b的公因数e,e|a
所以a,b的公因数集合与r,b的公因数集合相等
则它们的最大公因数也会相等
所以$gcd(a,b) = gcd(r,b) =gcd(a \mod b,b)$
复杂度&主要代码实现
直接递归调用
时间:最坏O($\log_2Min(a,b)$),当数据为斐波那契数列时才会卡到这个上界
空间:O(1)
扩展欧几里得算法(exgcd)
用以求解一组解(x,y)使得a*x+b*y=gcd(x,y)
操作
若b为0,则x=1,y=0
若b不为0,则递归调用求出exgcd(b,a%b)的解$x_{2} , y_{2}$,则此时解$x_{1} = y_{2} , y_{1} = x_{2} - [a/b] \cdot y_{2}$
[a]为取整函数(下取整),其作用为舍去实数a的小数部分,只保留整数部分
用途
求逆元
对于$a \cdot x \equiv 1 \pmod m$
$\exists k \in \mathbb{Z}$使得$a \cdot x + k \cdot m = 1$
因为$(a,m) = 1$
所以求出的x就是逆元了
证明
依然设a>b
若此时$b = 0$,则$gcd(a,b) = a = 1 \cdot a + 0 \cdot b$,所以$x = 1 , y = 0$
若此时$b \neq 0$,则设$x_{1} \cdot a + y_{1} \cdot b = gcd(a,b)$,$x_{2} \cdot b + y_{2} \cdot (a \mod b) = gcd(b,a \mod b)$
因为$gcd(a,b) = gcd(b,a \mod b)$(根据普通的欧几里得算法)
所以$x_{1} \cdot a + y_{1} \cdot b = x_{2} \cdot b + y_{2} \cdot (a \mod b) = x_{2} \cdot b + y_{2} \cdot (a - [a/b] \cdot b) = x_{2} \cdot b + y_{2} \cdot a - y_{2} \cdot [a/b] \cdot b = y_{2} \cdot a + (x_{2} - y_{2} \cdot [a/b]) \cdot b$
显然$x_{1} = y_{2} , y_{1} = x_{2} - [a/b] \cdot y_{2}$是一组解
因为当gcd为1一定能求出逆元,所以逆元存在当且仅当$gcd(a,m) = 1$的充分性得证
复杂度
与gcd一样:最坏O($\log_2Min(a,b)$)
只是多了些小常数
那天蒟蒻终于想起了,被卡常支配的恐惧


欧拉函数
定义
指小于等于n中与n互质的正整数的个数,记作$\varphi (n)$

浙公网安备 33010602011771号