同余

定义

同余类

对于 a[0,m1]\forall a\in [0,m-1],集合 {a+km}(kZ)\lbrace a+km\rbrace(k\in\mathbb Z) 的所有数模 mm 同余,余数都是 aa 。该集合称为一个模 mm同余类,简记为 aˉ\bar a

剩余系mm 的同余类一共有 mm 个,分别为 1ˉ,2ˉ,,\bar 1,\bar 2,\cdots,\overset{——}{m-1} 。他们构成 mm完全剩余系

11~mm 中与 mm 互质的数代表的同余类共有 φ(m)\varphi(m) 个,它们构成 mm简化剩余系

性质

最大公约数

欧几里得算法

a,bN,b0,gcd(a,b)=gcd(b,amodb)\small\forall a,b\in \mathbb N,b\neq0,\quad \gcd(a,b)=\gcd(b,a\bmod b)

裴蜀定理

对任意整数 a,b,x,y,ax+bya,b,x,y,ax+by 一定是 gcd(a,b)\gcd(a,b)的倍数

a,b ,x,y,kZ ,ax+by=kgcd(a,b)\forall a,b\ ,x,y,k\in\mathbb Z\ ,\small满足\quad ax+by=k*\gcd(a,b)

x,yZ,ax+by=gcd(a,b)\small 特别的\exist x,y\in\mathbb Z,\small满足\quad ax+by=\gcd(a,b)

扩展欧几里得算法

点击查看代码
ll exgcd(ll a,ll b,ll &x,ll &y){
    if(b==0){
        x=1;
        y=0;
        return a;
    }
    ll d=exgcd(b,a%b,x,y); //也可以写成
    ll t=x;             // ll d=exgcd(b,a%b,y,x);
    x=y;                 //y-=(a/b)*x;
    y=t-y*(a/b);
    return d;
}

该算法解得 x0,y0x_0,y_0 为一组特解,ddgcd(a,b)\gcd(a,b) 对于不定方程 ax+by=cax+by=c 的通解可以表示为:

x=cdx0+kbd,y=cdy0kad(kZ)x=\frac{c}{d}x_0+k\frac{b}{d},\quad y=\frac{c}{d}y_0-k\frac{a}{d}\quad (k\in\mathbb Z)

m1=bd ,m2=adm_1=\frac{b}{d}\ ,m_2=\frac{a}{d} ,则有 x=xmin+km1, y=ymin+km2x=x_{min}+km_1,\ y=y_{min}+km_2

xmin=x(modm1),ymin=y(modm2)x_{min}=x\pmod {m_1}, y_{min}=y\pmod{m_2}

费马小定理

pp 是素数,则对于任意整数 aa ,有 apa(modp)a^p\equiv a\pmod p

欧拉定理

若正整数 a,na,n 互质,则 aφ(n)1(modn)a^{\varphi(n)}\equiv 1\pmod n, 其中 φ(n)\varphi(n) 为欧拉函数

推论:若正整数 a,na,n 互质,则对于任意正整数 bb,有 ababmodφ(n)(modn)a^b\equiv a^{b \bmod \varphi (n)}\pmod n

特别地,当 a,na,n 不一定互质且 bφ(n)b\geq\varphi(n) 时,有ababmodφ(n)+φ(n)(modn)a^b\equiv a^{b \bmod \varphi (n)+\varphi(n)}\pmod n

扩展欧拉定理(欧拉降幂公式)有:

{ababmodφ(n)(modn)gcd(a,n)=1abab(modn)gcd(a,n)1,b<φ(n)ababmodφ(n)+φ(n)(modn)gcd(a,n)1,bφ(n)\begin{cases} a^b\equiv a^{b \bmod \varphi (n)}\pmod n&\gcd(a,n)=1 \\ a^b\equiv a^b\pmod n&\gcd(a,n)\neq1,b<\varphi(n)\\ a^b\equiv a^{b \bmod \varphi (n)+\varphi(n)}\pmod n &\gcd(a,n)\neq1,b\geq\varphi(n) \end{cases}

威尔逊定理

任意一个大于1的数是素数的充要条件为:

p>1, (p1)!+10(modp)pP\small p>1,\ (p-1)!+1\equiv0\pmod{p}\Leftrightarrow p \in \mathbb{P}

中国剩余定理

m1,m2,,mnm_1,m_2,\cdots,m_n 是两两互素的整数,m=i=1nmi, Mi=mmi, Mi1m=\prod_{i=1}^n m_i,\ M_i=\frac{m}{mi},\ M_i^{-1}MiM_i 在模 mim_i 下的逆元。对于任意的 nn 个整数 a1,a2,,ana_1,a_2,\cdots,a_n ,方程组

{xa1(modm1)xa1(modm1)xan(modmn)\begin{cases} x\equiv a_1\pmod{m_1}\\ x\equiv a_1\pmod{m_1}\\ \quad \quad \vdots\\ x\equiv a_n\pmod{m_n}\\ \end{cases}

有整数解,解为 x=i=1naiMiMi1x=\sum_{i=1}^n a_i M_i M_i^{-1}

原理:其中的第 ii 项,由于 Mi1M_i^{-1}MiM_i 在模 mim_i 下的逆元,故在令该项对 mim_i 取模时得到 aia_i,而对于其他所有项,由于 MiM_i 为其他所有模数的公倍数,故为 00

点击查看代码
ll CRT(vector<Pll>&v){//v[i].ft=mi,v[i].sd=ai
    ll M = 1, ans = 0,m;
    for(auto&it:v)M *= it.ft;
    for(auto&it:v){
        m = M / it.ft;
        ans = (ans + it.sd * m * inv(m, it.ft)) % M;
    }
    return ans;
}

当问题中的模数 mim_i 不再两两互素时,可多次扩展欧几里得进行求解 扩展中国剩余定理

点击查看代码
ll exCRT(vector<Pll>&v){//v[i].ft=mi,v[i].sd=ai
    ll a, b, c, x, y, M = v[0].ft, ans = v[0].sd;
    for(int i=1;i<(int)v.size();i++)
    {
        a=M,b=v[i].ft,c=(v[i].sd-ans%b+b)%b;
        ll gcd=exgcd(a,b,x,y),bg=b/gcd;
        if(c%gcd!=0) return -1;
        x=quick_mul(x,c/gcd,bg);
        ans+=x*M;
        M*=bg;
       ans=(ans%M+M)%M;
    }
    return ans;
}

乘法逆元

定义 若整数 a,pa,p 互素 ax1(modp)a*x\equiv1\pmod p,则称 xxaa 的模 mm 乘法逆元

  • pp 为素数,则可以利用费马小定理有 aap21(modp)a*a^{p-2}\equiv 1\pmod p, 故只需要用快速幂求解 ap2a^{p-2}

  • pp 不一定是素数,那么可以通过求解同余方程 ax1(modp)a*x\equiv 1\pmod p ,利用扩展欧几里得算法即可

线性逆元递推公式

若要求对 11~nn 个数求模 pp 的逆元,可推导关系得到递推公式线性求解

首先 111(modp)1^{-1}\equiv1\pmod p

p=ki+r,(1<r<i<p), k=pi, r=ppii=p(modi)p=k*i+r,(1<r<i<p),\ k=\lfloor\frac{p}{i}\rfloor,\ r=p-\lfloor\frac{p}{i}\rfloor*i=p\pmod i

ki+r0(modp)k*i+r\equiv0\pmod p,则 irk1(modp)i\equiv-r*k^{-1} \pmod p

i1r1k(modp)i^{-1}\equiv-r^{-1}*k\pmod p

i1pi(pmodi)1(modp)\quad i^{-1}\equiv-\lfloor\frac{p}{i}\rfloor*(p\bmod i)^{-1}\pmod p

i1(ppi)(pmodi)1(modp)\quad i^{-1}\equiv(p-\lfloor\frac{p}{i}\rfloor)*(p\bmod i)^{-1}\pmod p