拓展欧几里得和同余方程: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})\)来得到,这个的解法我们后面再说
貌似知识点讲的太多了,我们来说一道例题
本文来自博客园,作者:羊扬羊,转载请注明原文链接:https://www.cnblogs.com/sheepcsy/p/16508302.html

浙公网安备 33010602011771号