欧几里得辗转相除法和裴蜀等式

版权声明:Edited by I Hsien https://blog.csdn.net/POTASSIUM711/article/details/88074920

欧几里得辗转相除法1


最大公因数的定义略,先 来看上一篇文章中提到的"abbr"定理的推论.
a , b 0 , ( a , b ) = ( a + b q , b ) = ( a , b + a q ) . 设 a,b为不全为0的整数,则\\ (a,b)=(a+bq,b)=(a,b+aq).
在公式形式上,有 q b + a = " a " qb+a="a" , a = r a='r' , b = b b='b' ,也就是说形式上跟abbr没有什么区别.


接下来说一下欧几里得辗转相除的用途和方法.
用途:求两个不全为0整数的最大公因数
原理,就是上面的abbr定理的变种.最核心的就是由已知的 a + b q a+bq 构造a和b.
就像这样:(注:下面的余数r都是严格区间内的余数)
Assign r 0 = a r_0=a , r 1 = b r_1=b ,
r 0 = r 1 q 1 + r 2 r 1 = r 2 q 2 + r 3 . . .   . . . r n 2 = r n 1 q n 1 + r n r n 1 = r n q n + 0 r_0=r_1q_1+r_2 \\ r_1=r_2q_2+r_3\\...\ ...\\ r_{n-2}=r_{n-1}q_{n-1}+r_n\\ r_{n-1}=r_nq_n+0
用语言解释,就是说不断做a/b的带余除法,除得的商做下一个被除数,余数做下一个除数.又因为余数的严格区间的,所以一定小于商,所以下一次的余数一定不会等于被除数.
那是不是所有的a,b组合都能经过有限步除到最后余数=0呢?答案是所有的都可以.证明如下:
p r o o f   i   i n   t h e   p r o c e s s r i + 1 < r i r i z r i .     r i = 0. {proof} \\\because \ \forall i\ in \ the\ process\\ 总有r_{i+1} <r_i\\ 又r_i\in \mathbb{z}\\ r_i是有限的.\\ \therefore \ \exists \ r_i=0.
那为什么是 r n r_n 是最小公因数呢?
p r o o f ( a , b ) = ( r 0 , r 1 ) ( r 0 , r 1 ) = ( r 1 , r 2 ) ( r 1 , r 2 ) = ( r 2 , r 3 ) . . . . . . = ( r n 2 , r n 1 )   = ( r n 1 , r n ) r n r n 1 ( r n 1 , r n ) = r n {proof} \\(a,b)=(r_0,r_1)\\ (r_0,r_1)=(r_1,r_2)\\ (r_1,r_2)=(r_2,r_3)\\ ...\\ ...=(r_{n-2},r_{n-1})\\ \ =(r_{n-1},r_n)\\ 又r_n|r_{n-1}\\ (r_{n-1},r_n)=r_n\\
那么,根据上面的计算过程,可以得出以下结论:
( 1 ) ( a , b ) = r n ( 2 ) s , t z r n = s a + t b ( 3 ) c z ,   i f   c a   a n d   c b ,   c r n . (1)(a,b)=r_n\\ (2)\exists s,t\in \mathbb{z}\rightarrow r_n=sa+tb\\ (3)\forall c\in \mathbb{z},\ if\ c|a\ and\ c|b,\rightarrow\ c|r_n.
第一个已经证明了,第三个也很好想.
接下来我们关注于第二条性质:
为什么存在?
如何求得?
注:这条定理也叫裴蜀定理(等式)2

由最后一个式子 r n 2 = r n 1 q n 1 + r n r_{n-2}=r_{n-1}q_{n-1}+r_n ,有
r n = r n 2 r n 1 q n 1 r_n=r_{n-2}-r_{n-1}q_{n-1}
再对 r n 1 r_{n-1} 进行形式拆分,有 r n 1 = r n 3 r n 2 q n 2 r_{n-1}=r_{n-3}-r_{n-2}q_{n-2}
再对 r n 2 r_{n-2} 进行形式拆分,有 r n 2 = r n 4 r n 3 q n 3 r_{n-2}=r_{n-4}-r_{n-3}q_{n-3}

直到 r 2 = r 0 r 1 q 1 r_2=r_0-r_1q_1
又上述全部过程的参数都是整数
所以存在整数s,t,使得…

所以产生了如下的迭代方法:
S 0 = 0 S 1 = 1 S i + 1 = S i 1 q n i S i S n 1 , S n S n 1 a + S n b = r n S_0=0\\ S_1=1\\ S_{i+1}=S_{i-1}-q_{n-i}S_i\\ 迭代所得的S_{n-1},S_n\\满足S_{n-1}a+S_nb=r_n
比如对于(30111,4520)
有表格:

i 0 1 2 3 4 5 6 7 8 9 10 11
q n i q_{n-i} 2 1 1 4 1 21 1 1 1 6
S i S_i 0 1 -2 3 -5 23 -28 611 -639 1250 -1889 12584

是怎么求得每一个的 s i s_i 的呢?
由递推公式, S i = S i 2 S i 1 q n i S_i=S_{i-2}-S_{i-1}q_{n-i} ,于是在表格上进行如下操作:
裴蜀.png
S 0 = 0 , S 1 = 1 S 2 = S 0 ( S 1 2 ) S 3 = S 1 ( S 2 1 ) . . .   . . . S_0=0,S_1=1\\ S_2=S_0-(S_1*2)\\ S_3=S_1-(S_2*1)\\ ...\ ...
这就很清楚了.所以在做这种题的时候要把表格列出来.
几点注意事项:

  1. i从0到n-1;
  2. q从 q 0 q_0 开始从右至左;
  3. S i S_i 从左到右算;

Here it is.
这玩意用计算机计算更有意思,得空写一个放上来.


  1. https://zh.wikipedia.org/wiki/輾轉相除法 ↩︎

  2. https://zh.wikipedia.org/wiki/貝祖等式 ↩︎

猜你喜欢

转载自blog.csdn.net/POTASSIUM711/article/details/88074920