大家好,欢迎来到IT知识分享网。
欧几里得算法
function Euclid(a; b)
1: if b = 0 then
2: return a;
3: end if
4: return Euclid(b; a mod b);
复杂度分析:
设 a>=b a >= b ,则有 amodb<a2 a mod b < a 2
证明:
假设 a=bq+r a = b q + r ,其中 q>=1 q >= 1 ,且 0<=r<b 0 <= r < b ,
则有:
r=a−bq<b r = a − b q < b
因此:
a<b+bq a < b + b q 即 ==> a<b(1+q) a < b ( 1 + q )
于是:
11+q×a<b 1 1 + q × a < b
==> a1+q−b<0 a 1 + q − b < 0
==> aq1+q−bq<0 a q 1 + q − b q < 0
==> aq1+q+a1+q−bq<a1+q a q 1 + q + a 1 + q − b q < a 1 + q
===> a−bq<a1+q a − b q < a 1 + q
因为 a>=b a >= b ,所以有 q>=1 q >= 1 ,于是: a1+q<=a1+1 a 1 + q <= a 1 + 1
所以有: a−bq<a1+q<=a2 a − b q < a 1 + q <= a 2
即: amodb<a2 a mod b < a 2 ,每迭代一轮,a,b都会变成原来的一半!
因为算法的终止条件是a或b被处理为0为止。
于是复杂度为: min(O(loga),O(logb)) m i n ( O ( l o g a ) , O ( l o g b ) ) 即O(logn)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15774.html