剩余
剩余类
在模$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+(amod b)y_1=d$
$bx_1+(a-lfloorfrac{a}{b} floorcdot b)y_1=d$
$bx_1+ay_1-lfloorfrac{a}{b} floor cdot by_1=d$
$ay_1+b(x_1-lfloorfrac{a}{b} floor cdot y_1)=d$
$x=y_1,y=x_1-lfloorfrac{a}{b} floor 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,cin N)$。
该方程有解的充要条件是$(a_1,a_2,…,a_n)|c$。
$(a_1,a_2)=d_2,(a_2,a_3)=d_3,…$
$left{egin{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} ight.$
解出最后一个迭代一下就好了。
$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{egin{array}\ xequiv a_1(mod m_1)\xequiv a_2(mod m_2)\…\xequiv a_r(mod m_r) end{array} ight.$
有模$M=m_1m_2…m_r$的唯一解。
令$M_i=Pi_{j eq i}m_j$,求出$p_i,q_i$使得$M_ip_i+m_iq_i=1$
令$e_i=M_ip_i$,有:
$e_i=$$left{egin{array}\ 0(mod m_i),j eq i \ 1(mod m_j),j=i end{array} ight.$
所以$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=kcdot i+r$可以得到$kcdot i+r equiv 0(mod p)$
整理一下可以得到$i^{-1}equiv -k cdot r^{-1}(mod p)$
所以有$i^{-1}equiv -lfloorfrac{p}{i} floorcdot (pmod i)^{-1}$
递推即可。
高次不定方程
周期性
对于$A^xequiv B(mod C)$这个方程。
最大周期不超过$C$。
Baby-step giant-step算法
由周期性,我们可以求解$xleq C$时候的解。
令$i=lfloorsqrt C floor$,那么有$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^requiv 1(mod n)$。
当$(a,n)=1$时,最小的正整数r被称为$a$模$n$的阶,记为$Ord_n(a)$。
阶的性质
1.对于任意一个正整数$t$满足$a^tequiv 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^Nequiv a(mod p)$,本节只介绍$p$为素数的情况。
令$g^y=x,g^t=a$,则有$g^{yN}equiv g^t(mod p)$
由原根的性质我们可以直接得到$yNequiv t (mod p-1)$
$t$的取值可以用$BSGS$算法解决,然后解方程即可。