简单数论总结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

同余具有以下性质:

  1. 自反性:\( a\equiv a (mod P) \)
  2. 对称性:若存在\( a\equiv b (mod P) \) ,则 \( b\equiv a (mod P) \)
  3. 传递性:若存在\( a\equiv b (mod P) \) ,\( b\equiv c (mod P) \), 则 \( a\equiv b (mod P) \)
  4. 同加性:若\( a\equiv b (mod P) \),则 \( (a+c)\equiv (b+c) (mod P) \)
  5. 同乘性1:若\( a\equiv b (mod P) \),则 \( (a*c)\equiv (b*c) (mod P) \)
  6. 同乘性2:若\( a\equiv b (mod P) \) , \( c\equiv d (mod P) \),则 \( (a*c)\equiv (b*d) (mod P) \)
  7. 同幂性:若\( a\equiv b (mod P) \),则 \( (a^c)\equiv (b^c) (mod P) \)

  由此,我们可以得到两条推论

  1.   \( (a*b)mod k = (a mod k)*(b mod k) mod k \)
  2.        若\( 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)) \) )

  至此,问题得到了解决

猜你喜欢

转载自www.cnblogs.com/dreagonm/p/9362887.html