简单数论总结2——同余方程与扩展欧几里得算法

在上一次总结过后鸽了没多久其实是快要开学赶紧来肝上两篇

今日内容——同余方程和扩展欧几里得算法

同余

同余的定义:若存在两个整数a,b,使得(a - b) MOD P为0,则称作a与b在MOD P的情况下同余

换种通俗的说法,就是,a MOD P与b MOD P相等

记作  ( aequiv b (mod P) )

对于整数a,b,c和自然数m,n

同余具有以下性质:

  1. 自反性:( aequiv a (mod P) )
  2. 对称性:若存在( aequiv b (mod P) ) ,则 ( bequiv a (mod P) )
  3. 传递性:若存在( aequiv b (mod P) ) ,( bequiv c (mod P) ), 则 ( aequiv b (mod P) )
  4. 同加性:若( aequiv b (mod P) ),则 ( (a+c)equiv (b+c) (mod P) )
  5. 同乘性1:若( aequiv b (mod P) ),则 ( (a*c)equiv (b*c) (mod P) )
  6. 同乘性2:若( aequiv b (mod P) ) , ( cequiv d (mod P) ),则 ( (a*c)equiv (b*d) (mod P) )
  7. 同幂性:若( aequiv 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 )

   但是,相信像我一样睿智的你也发现了一个问题,没错,同余不满足同除性,即不满足若( aequiv 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)} | (tin 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)) ) )

  至此,问题得到了解决

原文地址:https://www.cnblogs.com/dreagonm/p/9362887.html