数论之欧几里德gcd

序:这篇博客我最开始学的时候写的,后来又学了一遍,自我感觉这篇好像有问题,扩展欧几里得建议走这边


首先先说,欧几里德一共有俩,欧几里德和扩展欧几里德,前者非常简单,后者直接变态(因为我太菜)

gcd = 最大公因数

普通欧几里德


 先说普通的,就是辗转相除法求最大公因数,辗转相除就是基本数论,不讲了直接上代码

int gcd( int a,int b ){
    if( b == 0 ) return a;
    return gcd( b,a%b );
}
View Code

递归终止的边界就是a是b的倍数,也就是 a%b == 0

 其中保证b一定是不大于a的,也就是说一直是b $\le$ a ,所以判断b是否为0就好了

 

扩展欧几里德


然后就到了一个变态的东西了

先引入一个东西,叫裴蜀定理

搞定了裴蜀定理,下面就能证了:

我们这里有两个数,a,b $\in$ N 且 a,b互质。

对于a,b来说,一定存在 x,y $\in$ N满足;

  ax + by = 1 = gcd( a,b )

已知gcd( a,b ) = gcd( b,a%b )

且因为a,b互质,则 gcd( b,a%b ) 的值一定也为 1,

 

插一句再往下走,避免看不懂:

1. 对于任意的两个数a,b $\in$ N (a $\ge$ b)必然满足:
    a = bx + r  (r $\le$ b)
  而其中,我们用 a%b 表示余数 r
  因为 r 也可以用 a - b$\lfloor \frac{a}{b} \rfloor$ 来表示   ( $\lfloor \frac{a}{b} \rfloor$ 表示x )
  即$\lfloor \frac{a}{b} \rfloor$ 和 a%b 都是表示 r ,故可以替换

2.   下文中的x',y'就是对于 bx' + (a%b)y' = gcd(b,a%b) = 1 中 x',y' 的解

 

所以也一定存在 bx' + ( a - b$\lfloor \frac{a}{b} \rfloor$ )y' = 1 

即 bx' + ( a - b$\lfloor \frac{a}{b} \rfloor$ )y' = ax + by

再移一下项,可以得到 a( x-y ) b(  y-( x' - $\lfloor \frac{a}{b} \rfloor$ y' )  ) = 0 (想自己手推的同志们可以自己试一试)

最后可以得到x = y' 且 y = x' - $\lfloor \frac{a}{b} \rfloor$ y'

特殊的,当b = 0 的时候,(a,0) 对应的x = 1,y = 0

 

posted @ 2021-09-03 20:49  little_sheep_xiaoen  阅读(208)  评论(0编辑  收藏  举报