简单数论总结2——同余方程与扩展欧几里得算法
在上一次总结过后鸽了没多久其实是快要开学赶紧来肝上两篇
今日内容——同余方程和扩展欧几里得算法
同余
同余的定义:若存在两个整数a,b,使得(a - b) MOD P为0,则称作a与b在MOD P的情况下同余
换种通俗的说法,就是,a MOD P与b MOD P相等
记作 \( a\equiv b (mod P) \)
对于整数a,b,c和自然数m,n
同余具有以下性质:
- 自反性:\( a\equiv a (mod P) \)
- 对称性:若存在\( a\equiv b (mod P) \) ,则 \( b\equiv a (mod P) \)
- 传递性:若存在\( a\equiv b (mod P) \) ,\( b\equiv c (mod P) \), 则 \( a\equiv b (mod P) \)
- 同加性:若\( a\equiv b (mod P) \),则 \( (a+c)\equiv (b+c) (mod P) \)
- 同乘性1:若\( a\equiv b (mod P) \),则 \( (a*c)\equiv (b*c) (mod P) \)
- 同乘性2:若\( a\equiv b (mod P) \) , \( c\equiv d (mod P) \),则 \( (a*c)\equiv (b*d) (mod P) \)
- 同幂性:若\( a\equiv b (mod P) \),则 \( (a^c)\equiv (b^c) (mod P) \)
由此,我们可以得到两条推论
- \( (a*b)mod k = (a mod k)*(b mod k) mod k \)
- 若\( a mod p = x ,a mod q = x,p、q互质,则a mod p*q =x \)
但是,相信像我一样睿智的你也发现了一个问题,没错,同余不满足同除性,即不满足若\( a\equiv b (mod P) \),则 \( (a/c)\equiv (b/c) (mod P) \)
那么除法取模要如何解决呢,秃顶聪明绝顶的数学家也发现了这个问题,利用逆元的知识,我们就可以解决这个问题啦!
但是逆元,我决定下次再讲,其实就是鸽了(咕咕咕)
扩展欧几里得算法
欧几里得算法相信大家都已经知道了QwQ
就是求gcd的辗转相除法
不知道的可以去看我的上一篇文章(理直气壮的骗访问量QwQ)
那么扩展欧几里得算法是啥?(黑人问号.jpg)
扩展欧几里得算法就是利用了欧几里得算法中迭代的过程,使其能够求出形如\( ax + by = gcd(a , b) \) 的方程的应用
我们可以简单的证明和感性理解一下扩展欧几里得算法的正确性:
首先,当欧几里得算法停止迭代时
有此情况 \( a=1,b=0,此时,gcd(a,b)=x,ax+by = gcd(a,b)显然成立 \)
在迭代的过程中
有 \( b{x}' + (a mod b) {y}' = gcd(b, a%b) \)与 \( ax + by = gcd(a, b) \)
则由上一层推出
\( x= {y}' \),\( y={x}'-a/b*{y}' \)
于是可推至初始情况,得出解
下面给出代码的实现
int exgcd (int a, int b, int &x, int &y){ if(b == 0){ x = 1; y = 0; return a; } int ans = exgcd ( b , a % b , x ,y ); int t = x; x = y; y= t - a / b * y; return ans; }
就是这样喵
对扩展欧几里得定理的应用
利用扩展欧几里得定理,我们能够求解形如\( ax+by = c \)的问题
当 \(c \mid gcd(a,b) \)时,有\( ax+by = c \)的不定方程有整数解
所以,把原式变形为 \( ax+by = d (d = gcd(a,b) ) \)的形式,利用扩展欧几里得定理可解出方程的一组解\( (x,y) \),再将其乘以 \( \frac{c} {gcd(a,b)} \)
就能解出原方程的解啦!(快夸我.jpg)
对扩展欧几里得定理求出解的处理
由于形如 \( ax+by = c \) 的线性不定方程有无穷多解,扩展欧几里得定理进行求解的过程中,不一定保证求出的是最小正整数解,为得到最小正整数解,我们有如下的方式
易推出,对于线性不定方程 \( ax+by = c \),有一组解\(x,y\) 与另一组解 \( a*(x + \frac {a*t} {gcd(a,b)}) ,b*(y- \frac {b*t} {gcd(a,b)} | (t\in \mathbb{Z})) \)都为原方程的解
则可得出方法:对于线性不定方程 \(ax+by = c \) ,其最小正整数解为( \( x= ( (x\%t)+t)\%t) ,(t=b/gcd(a,b))\),\( y=(((y\%t)+t)\%t) ,(t=a/gcd(a,b)) \) )
至此,问题得到了解决