同余


同余的定义

给定整数$m$,若用$m$除两个整数$a$和$b$所得的余数相同,称$a$和$b$对模$m$同余,记作$aequiv bpmod{m}$

同余系与剩余系

对于$ain[0,m-1]$,集合${a+km}(kin Z)$的所有数模$m$ 同余,余数都是$a$,该集合称为一个模$m$的同余类,简记为$ar{a}$.

模$m$的同余类一共有$m$个,分别为$ar{0}$,$ar{1}$,$ar{2}$ $.$ $.$ $.$ ,$ar{m-1}$ 。它们构成$m$的完全剩余系

$[1,m]$中与m互质的数代表的同余类共有$phi(m)$个,它们构成的$m$简化剩余系

说白了,完全剩余系是$[0,m-1]$中所有的同余类,简化剩余系是互质的同余类。

上面并没有什么用

同余的性质

对于整数$a$,$b$,$c$和自然数$n$,$m$,对模$m$同余满足:

自反性:$aequiv apmod{m}$

对称性:若$aequiv bpmod{m}$,那么$bequiv apmod{m}$

传递性:若$aequiv bpmod{m}$,$bequiv cpmod{m}$,那么$aequiv cpmod{m}$

同加性:若$aequiv bpmod{m}$,$cequiv dpmod{m}$,那么$apm cequiv bpm dpmod{m}$

同乘性:若$aequiv bpmod{m}$,$cequiv dpmod{m}$,那么$acequiv bdpmod{m}$

同除性(自己取的):若$acequiv bdpmod{m}$,$gcd(c,m)=1$,那么$aequiv bpmod{m}$

同幂性:若$aequiv bpmod{m}$,那么$a^nequiv b^npmod{m}$

不知道什么性:若$amod p=x$,$amod q=x$,其中$gcd(p,q)=1$,则有$amod pq=x $

$aequiv bpmod{m}$,当且仅当$mmid(a-b)$

$aequiv bpmod{m}$,当且仅当存在整数$k$,使得$a=b+km$

同余的基本定理

学科分割线

费马小定理

若$p$是质数,则对于任意整数$a$,有$a^pequiv apmod{p}$。

欧拉定理及其推论

若正整数$a$,$n$互质,则$a^{phi(n)}equiv 1pmod{n}$。

推论:若$gcd(a,n)=1$,对于任意正整数$b$,有$a^bequiv a^{bmod phi(n)}pmod{n}$(这很牛逼,意味着我们可以把一个天文数字级别的指数拉下来)

由以上两个定理:当$p$为质数,$a$,$p$互质时,$a^{p-1}equiv 1pmod{p}$,费马小定理的另一种形式。

拓展欧几里得算法

欧几里得算法

想一想,在远古时代(滑稽),如果我们要求$gcd(a,b)$怎么办呀,这时候一个名叫欧几里得的家伙出现了,他告诉我们$gcd(a,b)=gcd(b,a\%b)$,这样一切都变得和谐了

inline int gcd(int x,int y){
    return y?gcd(y,x%y):x;
} 

因为这是质数与合数的内容,本文不在赘述。

拓展欧几里得算法

如果我们还想要$ax+by=gcd(a,b)$的解$(x,y)$怎么办呢?

$Bacute{e}zout$定理说$ax+by=gcd(a,b)$一定有解,证明在文章最后的附录里

在证明过程中,$Bacute{e}zout$定理顺便给了我们求解的方法(建议这个地方先看一下附录,如果不理解的话一定要搞懂,拓欧在后面应用很广)。

inline int Exgcd(int a,int b,int &x,int &y){
    if(!b){
        x=1;
        y=0;
        return a;
    }
    int d=Exgcd(b,a%b,x,y);
    int z=x;
    x=y;
    y=z-y*(a/b);
    return d;
}

不定方程的解法

我们这里指的是狭义不定方程,即形如$ax+by=c$的方程

一、设$d=gcd(a,b)$,显然知道,如果$d mid c$,原方程应该无解

二、用拓展欧几里得算法找出$ax+by=gcd(a,b)$的特解$(x_0,y_0)$

三、原方程的解为$(x_0 imesdfrac{c}{d},y_0 imesdfrac{c}{d})$

乘法逆元

定义:若整数$a$,$p$互质,并且$amid b$,若存在一个整数$x$,使得$b/aequiv b*xpmod{p}$。称$x$为$a$的模$p$乘法逆元,记为$a^{-1}pmod p$。

一句话,因为$b imes a^{-1}equiv b/aequiv b/a imes a imes a^{-1}pmod{p}$,所以$a imes a^{-1}equiv 1pmod{p}$(这里的$-1$不是$-1$次方哟)

所以有了更简单的定义:$a$与$p$互质时,$axequiv 1pmod{p}$,此时$x$为$a$的模$p$乘法逆元

介绍三种求法

一、费马小定理

当p是质数,a,p互质时,我们有费马小定理$a^{p-1}equiv 1pmod{p}$,即$a imes a^{p-2}equiv 1pmod{p}$,就是$a$的模$p$乘法逆元,快速幂计算即可。

二、拓展欧几里得

$axequiv1pmod {b}$把它变为等式$ax+by=1$

在上面我们讨论过此类不定方程的解法,这里只温习一遍。

首先要想有解就要满足$gcd(x,y)mid1$

所以$gcd(x,y)$必须等于1,用$gcd(x,y)$代替1

原式就变成了$ax+by=gcd(a,b)$

这不就是裸的拓欧吗?直接跑一遍就行了呗。

三、线性递推

用于求一连串数字模$p$意义下的逆元

首先$1^{-1}=1pmod p$,即1在模所有数的意义下逆元都是1(在模1意义下没有意义)

然后设$p=k imes i+r$(理解为$p$是被除数,$i$是除数,商$k$,余$r$)

在模p意义下$k imes i+requiv 0pmod {p}$

两边同时乘以i的逆元和r的逆元$k imes i imes i^{-1} imes r^{-1}+r imes r^{-1} imes i^{-1}equiv 0pmod {p}$

就是$k imes r^{-1}+i^{-1}equiv 0pmod {p}$

$i^{-1}$这一项已经出现了,所以我们移项$i^{-1}equiv -k imes r^{-1}pmod {p}$

把$k$和$r$都用$p$和$i$代替$i^{-1}equiv -leftlfloordfrac{p}{i} ight floor imes(pmod i)^{-1}pmod{p}$

inv[1]=1;
for(int i=2; i<p; i++)
    inv[i]=(p-p/i)*inv[p%i]%p;

四、线性逆推(阶乘逆元)

有时候,在组合数问题中,我们经常会求$n!$的逆元,而此时方法三的数组会爆炸,前两种的时间复杂度太高,这时我们需要一种算法来快速求出$[1,n]$阶乘的逆元

对于$i$,设$i!^{-1}=inv[i]$

$$inv[i-1]=inv[i] imes i$$

用这个式子,我们可以先求出$n!^{-1}$,再线性逆推

fac[0]=1;
for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod;
inv[n]=quick_pow(fac[n]);
for(int i=n-1;i>=1;i--)inv[i]=inv[i+1]*(i+1)%mod;

乘法逆元有啥用

按照定义,我们在进行模意义下的除法时可以转化为乘这个数的逆元。举个例子,如果我们在模9的意义下除以2,其实跟乘以5的结果是一样的(2在模9意义下的逆元是5)

说白了$dfrac{a}{b}mod p=a imes b^{-1}mod p$

线性同余方程

对于给定的整数$a$,$b$,$m$,求解满足$axequiv bpmod m$的未知数$x$,或者无解。因为未知数的指数为1,所以称形如这样的方程一次同余方程,亦称线性同余方程。

解法:$axequiv bpmod {m}$可以变形为$ax+my=b$,对于这类不定方程,我们在拓展欧几里得算法提到过解法,就不再说了。

中国剩余定理

设$m_1$,$m_2$,$.$ $.$ $.$,$m_n$是两两互质的整数,$M=prod_{i=1}^nm_i $,$M_i=M/m$,$t_i$是线性同余方程组$M_it_iequiv1pmod {m_i}$的一个解。对于任意的$n$个整数$a_1$,$a_2$,$.$ $.$ $.$,$a_n$,方程组

$$egin{cases}xequiv a_1pmod {m_1}\xequiv a_2pmod {m_2}\dotsdots \xequiv a_npmod {m_n}end{cases}$$

有整数解,解为$x=sum_{i=1}^nM_it_ia_i$。(证明在附录)

inline int China(){
    int M=1,ans=0,x,y,Mi;
    for(int i=1;i<=n;i++)M*=m[i];
    for(int i=1;i<=n;i++){
        Mi=M/m[i];
        Exgcd(Mi,m[i],x,y);
        ans=(ans+Mi*x*a[i])%M;
    }
    return (ans+M)%M;
}

拓展中国剩余定理

求解同余方程组
$$egin{cases}xequiv a_1pmod {m_1}\xequiv a_2pmod {m_2}\dotsdots \xequiv a_npmod {m_n}end{cases}$$

$m_1$,$m_2$,$.$ $.$ $.$,$m_n$不一定两两互质,求$x$的最小非负整数解

假设已经求出了前$k-1$个方程的解$x$,记$M=lcm(m_1,m_2,$.$ $.$ $.$,m_{k-1})$,轻易得出 $left{x+i imes M(iin Z) ight}$ 是前$k-1$方程解的集合

我们设$x+t imes Mequiv a_kpmod {m_k}$,这是一个线性同余方程,我们可以用拓欧轻松得到$t$,若这个线性同余方程无解,就意味着整个同余方程组无解。

综上,$n-1$次拓展欧几里得即可解决问题。

inline int quick_mul(int a,int n,int p){
    int ans=0;
    while(n){
        if(n&1)ans=(ans+a)%p;
        a=(a+a)%p;
        n>>=1;
    }
    return ans%p;
}
int ExChina(){
    int x,y,k,M=m[1],ans=a[1];
    for(int i=2;i<=n;i++){
        int aa=M,bb=m[i],cc=(a[i]-ans%bb+bb)%bb;
        int tmp=Exgcd(aa,bb,x,y);
        if(cc%tmp!=0)return -1;
        x=quick_mul(x,cc/tmp,bb/tmp);
        ans+=x*M;
        M*=bb/tmp;
        ans=(ans%M+M)%M;
    }
    return (ans%M+M)%M;
}

高次同余方程

我们之前讨论了线性同余方程的解法,现在看看高次同余方程。

给定整数$a$,$b$,$p$,其中$gcd(a,p)=1$,求一个非负整数$x$,使得$a^xequiv bpmod{p}$。

Baby Step, Giant Step算法

设$x=i imes t-j$,其中$t=leftlceil sqrt{p} ight ceil$,则方程变为$a^{i imes t-j}equiv bpmod {p}$, 即$a^{i imes t}equiv b imes a^jpmod p$我们枚举每一个$j$,用快速幂算得 $b imes a^jmod p$,再插入$hash$。

第二次枚举$i$在$[0,t]$中每一个取值,算得$a^{t imes i}mod p$,若在$hash$中有值,意味着我们找到了最小的$i$和$j$,此时$x=i imes t-j$就是答案。

int BSGS(int a,int b,int p) {
    map<int,int>hash;
    hash.clear();
    b%=p;
    int t=(int)sqrt(p)+1;
    for(int j=0; j<t; j++) {
        int val=b*quick_pow(a,j,p)%p;
        hash[val]=j;
    }
    a=quick_pow(a,t,p);
    if(!a)return !b?1:-1;
    for(int i=0; i<=t; i++) {
        int val=quick_pow(a,i,p);
        int j=hash.find(val)==hash.end()?-1:hash[val];
        if(j>=0&&i*t-j>=0)return i*t-j;
    }
    return -1;
}

拓展BSGS算法

给定整数$a$,$b$,$p$。$a$,$p$不一定互质,求一个非负整数$x$,使得$a^xequiv bpmod p$。

$a$,$p$不一定互质了,那我们尽力把它搞成互质的。

先变成等式
$$a^x+py=b$$
设$d_1=gcd(a,p)$,两边同时除以$d_1$
$$a^{x-1} imes dfrac{a}{d1}+dfrac{p}{d_1} imes y=dfrac{b}{d}$$

再次变为同余式
$$a^{x-1} imes dfrac{a}{d_1}equiv dfrac{b}{d_1}pmod dfrac{p}{d_1}$$
如果$b$不是$d_1$的倍数,则方程无解。
如果此时$a$,$dfrac{p}{d_1}$还不互质,那我们设$D_1=dfrac{a}{d_1}$,$b_1=dfrac{b}{d_1}$,$p_1=dfrac{p}{d_1}$,$d_2=gcd(a,p_1)$

得到原式等于
$$a^{x-2} imes D_1 imes dfrac{a}{d_2}equivdfrac{b_1}{d_2}pmod dfrac{p_1}{d_2}$$
经过$n$波操作后,我们终于得到了一个互质的式子
$$a^{x-n} imes D_nequiv b_npmod {p_n}$$
其中$D_n=prod_{i=1}^ndfrac{a}{d_i}$,$b_n=dfrac{b}{prod_{i=1}^nd_i}$,$p_n=dfrac{p}{prod_{i=1}^nd_i}$。

直接跑$BSGS$就可以啦。

int ExBSGS(int a,int b,int p) {
    if(b==1||p==1)return 0;
    int g=gcd(a,p),k=0,tmp=1;
    while(g>1) {
        if(b%g!=0)return -1;
        k++;
        b/=g;
        p/=g;
        tmp=tmp*(a/g)%p;
        if(tmp==b)return k;
        g=gcd(a,p);
    }
    int x=BSGS(a,b*inv(tmp,p)%p,p);
    if(x==-1)return -1;
    return x+k;
}

附录

费马小定理及其证明

若$p$是质数,则对于任意整数$a$,有$a^pequiv apmod{p}$。

证明:

若$gcd(a,p)=1$,由欧拉定理
$$a^{phi(p)}equiv 1pmod{p}$$
因为$p$是质数,所以$phi(p)=p-1$,即
$$a^{p-1}equiv 1pmod{p}$$
两边同时乘$a$
$$a^pequiv apmod{p}$$

否则$gcd(a,p) e 1$,即$pmid a$,所以
$$a^pequiv aequiv 0pmod{p}$$

综上所述,得证。

欧拉定理及其证明

若正整数a,n互质,则$a^{phi(n)}equiv 1pmod{n}$。

证明:

用运算封闭和简化剩余系怕讲不懂,来个简单版的。

设$[1,n]$内与$n$互质的数的集合为$A=left{a_1,a_2,...,a_{phi(n)} ight}$,集合元素有$phi(n)$个且互不相同。

因为$gcd(a,n)=1$,所以对于任意的$i$,有
$$gcd(a imes a_imod n,n)=1$$

又因为对于任意的$i,j$,$a_i otequiv a_jpmod n$,所以
$$a_i imes a otequiv a_j imes apmod n$$

我们可以构造这样一个集合$B=left{a_1 imes amod n,a_2 imes amod n,...,a_{phi(n)} imes amod n ight}$,其中每个元素小于$n$且与$n$互质,互不相同,总数为$phi(n)$个。

发现了什么?$A$集合和$B$集合完全是相等的!

我们分别把两个集合的元素累乘起来,得到
$$a_1 imes a_2 imes ... imes a_{phi(n)}equiv a_1 imes a imes a_2 imes a imes... imes a_{phi(n)} imes a$$
两边约掉$A$集合的所有元素,即
$$a^{phi(n)}equiv 1pmod{n}$$
得证

拓展欧拉定理及其证明

$$a^bequivegin{cases}a^{bmodphi(m)}&gcd(a,m)=1\a^b&gcd(a,m) e1&b<phi(m)\a^{bmodphi(m)+phi(m)}&gcd(a,m) e1&bgeqslantphi(m)end{cases}$$
上式在$mod m$意义下

证明推论一:

设$b=k imesphi(m)+r$,所以$r=bmodphi(m)$
$$a^bequiv a^{k imesphi(m)+r}equiv (a^{phi(m)})^k imes a^rpmod m$$
因为$gcd(a,m)=1$,由欧拉定理知,$a^{phi(m)}equiv1pmod m$,代入原式
$$a^bequiv a^{k imesphi(m)+r}equiv (a^{phi(m)})^k imes a^requiv a^requiv a^{bmodphi(m)}pmod m$$
推论一得证

证明推论二:

太显然了,略。

证明推论三:

思路来自@ouuan巨佬

取$m$的一个质因数$p$,$m$可以表示为$p^r imes s$的形式,显然$gcd(p,s)=1$

所以有欧拉定理$p^{phi(s)}equiv 1pmod s$,又因为$phi(m)=phi(p^r) imesphi(s)$,所以
$$(p^{phi(s)})^{phi(p^r)}equiv 1^{phi(p^r)}pmod s$$
$$p^{phi(m)}equiv 1pmod s$$
设$p^{phi(m)}=ks+1$,两边同时乘$p^r$,得到
$$p^{phi(m)+r}equiv ks imes p^r+p^r$$
$$p^{phi(m)+r}equiv km+p^r$$
$$p^{phi(m)+r}equiv p^rpmod m$$
当$bgeqslant r$时
$$p^bequiv p^{b-r} imes p^requiv p^{b-r} imes p^{phi(m)+r}equiv p^{b+phi(m)}pmod m$$

 施工中……

原文地址:https://www.cnblogs.com/soledadstar/p/11358903.html