数论

(本篇博客大部分内容都会在讲证明(也许不够严谨),要想看代码实现的请点击这里


目录

  • 数论基础

一些定义

性质

  • 费马小定理

定理内容

证明

  • 欧几里得算法(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)$

posted @ 2019-02-02 16:00  zzpcd  阅读(281)  评论(0)    收藏  举报