拓展欧几里得和同余方程:OI数论(2)

1.同余

定义:若整数\(a\)和整数\(b\)除以正整数\(m\)的余数相同,则称\(a\)\(b\)\(m\)同余
记为\(a\equiv b\pmod{m}\)

2.两个有用的定理

费马小定理:若\(p\)为质数,则对于任意整数\(a\),有\(a^p \equiv a \pmod{p}\)
欧拉定理:若正整数\(a\)\(n\)互质,则\(a^{\phi(n)} \equiv 1 \pmod{n}\)

感兴趣的读者可以自行搜索相关定理的证明,笔者在此不提供

3.拓展欧几里得算法

还是先给一个定理

裴蜀定理:对于任意整数\(a,b\),存在一对整数\(x,y\)满足\(ax+by=gcd(a,b)\)

为了方便大家理解下面的知识,在此简要给出它的证明:
\(考虑对这对整数a,b做欧几里得算法gcd\)
\(在欧几里得算法最后一步,b=0,显然存在x=1,y=0使得a*1+b*0=gcd(a,0)\)
\(对于b>0,gcd(a,b)=gcd(b,a \bmod b)。如果对于b,a\bmod b存在了一对整数x,y使得b*x+(a\bmod b)*y=gcd(b,a\bmod b)\)
\(由于bx+(a\bmod b)y=bx+(a-b \left\lfloor\dfrac{a}{b}\right\rfloor)y=ay+b(x-\left\lfloor\dfrac{a}{b}\right\rfloor y)\)
\(我们令x'=y,y'=x-\left\lfloor\dfrac{a}{b}\right\rfloor y,就得到了一对整数x',y'使得ax'+by'=gcd(a,b)\)
总结一下,整个思路是在欧几里得算法的递归过程中利用数学归纳法得出来的,所以我们如果要计算这一对\(x,y\),就可以利用欧几里得算法进行计算
这个算法被称为拓展欧几里得算法

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

利用函数传地址,拓展欧几里得同时得到了两个数的gcd和整数对\(x,y\)

4.更加一般的情况?

对于更加一般的方程\(ax+by=c\)来说,它有解当且仅当\(gcd(a,b)|c\)
我们要解这个方程,只要首先解出\(ax+by=d(令gcd(a,b)=d)\)的一组解\(x_0,y_0\),然后再把这组解乘上\(c/d\)就得到了原方程的一组解

5.乘法逆元

我们知道,在取模时加法减法和乘法的取模都是自由的,而除法却不行,导致在一些计数问题中我们无法很好地取模导致精度无法承受,
这时就要想一些方法使得取模变得自由,乘法逆元就是这个方法

乘法逆元的定义:若整数\(b,m\)互质,且\(b|a\),则存在整数\(x\),使得\(a/b \equiv a*x \pmod {m}\),我们称\(x\)\(b\)的模\(m\)乘法逆元,记为\(b^{-1}\pmod{m}\)

如果\(a/b \equiv a*b^{-1} \equiv a/b*b*b^{-1} \bmod{m}\),因此\(b*b^{-1} \equiv 1 (\bmod {m})\)
\(m\)为质数的时候,并且\(b<m\),根据费马小定理,\(b^{-1} \equiv 1 (\bmod {m})\),即\(b*b^{m-2} \equiv 1(\bmod {m})\)
因此,当模数\(m\)为质数的时候,\(b^(p-2)\)即为\(b\)的逆元

当然对于更一般的情况,即仅仅是\(b,m\)互质的时候,需要求解同余方程\(b*x\equiv 1(\bmod{m})\)来得到,这个的解法我们后面再说

貌似知识点讲的太多了,我们来说一道例题

posted @ 2022-07-22 23:47  羊扬羊  阅读(69)  评论(0)    收藏  举报