基础数论
剩余
剩余类
在模$m$的意义下,余数相同的归为一个集合,所有整数被分为$m$个集合。
这些集合被称为模$m$剩余类。
完系
一个整数的集合,对$m$取模后,余数遍历了$0,1,2,…,m-1$。
那么该整数集合是模$m$完全剩余系,如${-4,3,5,10}$,即为模$4$的完全剩余系。
定理
设$a,b,c,d$为整数,$m$为正整数,则:
1.$a \equiv b(\mod m) ,且 d | m,则 a \equiv b (\mod d)$
2.若$a \equiv b(\mod m) ,则 (a,m) = (b,m)$
3.$a \equiv b(\mod m_i )(1 \leq i \leq n)同时成立,当且仅当 a \equiv b (mod[m_1,m_2,...,m_n])$
# 扩展欧几里得算法
令$d=(a,b)$,求$ax+by=d$的$x,y$
$ax+by=d,bx_1+(a\mod b)y_1=d$
$bx_1+(a-\lfloor\frac{a}{b}\rfloor\cdot b)y_1=d$
$bx_1+ay_1-\lfloor\frac{a}{b}\rfloor \cdot by_1=d$
$ay_1+b(x_1-\lfloor\frac{a}{b}\rfloor \cdot y_1)=d$
$x=y_1,y=x_1-\lfloor\frac{a}{b}\rfloor \cdot y_1$
当$gcd$进行到$b=0$时,显然有$x=1,y=0$
线性同余方程
N元一次不定方程(组)
有$n$元一次不定方程$a_1x_1+a_2x_2+…+a_nx_n=c(a_1,a_2,…,a_n,c\in N)$。
该方程有解的充要条件是$(a_1,a_2,…,a_n)|c$。
$(a_1,a_2)=d_2,(a_2,a_3)=d_3,…$
$\left\{\begin{array}\\a_1x_1+a_2x_2=d_2t_2\\d_2t_2+a_3x_3=d_3t_3\\…\\d_{n-1}t_{n-1}+a_nx_n=c \end{array}\right.$
解出最后一个迭代一下就好了。
$m$个$n$元一次不定方程的方程组可以消元成$n-m+1$元的一次不定方程组。
求一元线性同余方程
$ax \equiv b(\mod m)$,令$d=(a,m)$
若$d|b$,那么有$d$个模m不同的解(可以通过简单的证明得证)。
否则无解。
将式子转为$ax+my=d$,可以用扩展欧几里得算法求解。
求一元线性同余方程组
1.合并法:
$x=b_1(\mod m_1)$
$x=b_2(\mod m_2)$
有解的充要条件是$(m_1,m_2)|(b_1-b_2)$,小于$m$的解只有一个。
两个式子转为不定方程再联立可得$b_1-b_2=m_2y_2-m_1y_1$
套用扩展欧几里得算法
2.中国剩余定理:
设$m_1,m_2,…,m_r$为两两互素的正整数
$\left\{\begin{array}\\ x\equiv a_1(\mod m_1)\\x\equiv a_2(\mod m_2)\\…\\x\equiv a_r(\mod m_r) \end{array}\right.$
有模$M=m_1m_2…m_r$的唯一解。
令$M_i=\Pi_{j\neq i}m_j$,求出$p_i,q_i$使得$M_ip_i+m_iq_i=1$
令$e_i=M_ip_i$,有:
$e_i=$$\left\{\begin{array}\\ 0(\mod m_i),j \neq i \\ 1(\mod m_j),j=i \end{array}\right.$
所以$e_1a_1+e_2a_2+…+e_na_n$是方程的解,对$M$取模即为小于$M$的解。
逆元
扩展欧几里得算法
$ax \equiv 1(\mod m)$,$x$被称为$a$在模$m$的意义下的逆元。
显然有$ax+my=1$,套用扩展欧几里得算法即可。
注意$x$是正整数,要取模的。
费马小定理
对于素数$p$,我们有$a^{p-1}\equiv 1(\mod p)$。
显然有$a^{p-2}\equiv a^{-1}(\mod p)$,使用快速幂即可求解。
若$(a,m)=1$,则有$x^{\phi(m)}\equiv 1(\mod m)$。
线性求逆元
$p=k\cdot i+r$可以得到$k\cdot i+r \equiv 0(\mod p)$
整理一下可以得到$i^{-1}\equiv -k \cdot r^{-1}(\mod p)$
所以有$i^{-1}\equiv -\lfloor\frac{p}{i}\rfloor\cdot (p\mod i)^{-1}$
递推即可。
高次不定方程
周期性
对于$A^x\equiv B(\mod C)$这个方程。
最大周期不超过$C$。
Baby-step giant-step算法
由周期性,我们可以求解$x\leq C$时候的解。
令$i=\lfloor\sqrt C\rfloor$,那么有$x=pi+q$。
整理可得$A^{pi}=A^{-q}B$,可以用$hash$表进行预处理匹配了。
上面这个算法只有$(A,C)=1$的时候可以使用。
令$d=(A,C)$。
这时候我们可以将原方程变为$\frac{A}{d}A^{x-1}\equiv \frac{B}{d}(\mod \frac{C}{d})$
如果还不互素,那么重复上面那个操作即可。
显然如果$d$不是$B$的因子,那么无解。
原根
阶的定义
对于方程$a^r\equiv 1(\mod n)$。
当$(a,n)=1$时,最小的正整数r被称为$a$模$n$的阶,记为$Ord_n(a)$。
阶的性质
1.对于任意一个正整数$t$满足$a^t\equiv 1(\mod n)$,显然有$r|n$。
2.$r|\phi(n)$,由费马小定理得证。
原根的定义
若$a$模$m$的阶等于$\phi(m)$,则称$a$为模$m$的一个原根。
原根的解法
从小到大暴力枚举正整数$g$。
对于$m-1$的每一个质因子$a$,检查$g^{\frac{m-1}{a}}\equiv 1(\mod m)$时候成立。
成立则说明$g$不是原根。
N次剩余
方程$x^N\equiv a(\mod p)$,本节只介绍$p$为素数的情况。
令$g^y=x,g^t=a$,则有$g^{yN}\equiv g^t(\mod p)$
由原根的性质我们可以直接得到$yN\equiv t (\mod p-1)$
$t$的取值可以用$BSGS$算法解决,然后解方程即可。