`
coolsooner
  • 浏览: 1310957 次
文章分类
社区版块
存档分类
最新评论

最大公约数与欧几里德算法

 
阅读更多

记a、b的最大公约数为gcd(a,b)。

这里对于最大公约数的讨论仅限于非负整数,因为显然有gcd(a,b)=gcd(|a|,|b|)。

计算最大公约数的Euclid算法基于下面定理:

【GCD递归定理】对于任意非负整数a和任意正整数b,gcd(a,b)=gcd(b,a%b)。

Euclid算法最简单的递归版本(C语言版)如下:

迭代版本(C语言版)如下:

Euclid算法运行时间分析

【引理】如果a>b≥1且Euclid(a,b)执行了k≥1次递归调用,则a≥Fk+2,b≥Fk+1。(其中Fk为Fabonacci的第k项)

【Lamé定理】对于任意k≥1,若a>b≥1且b<Fk+1则Euclid(a,b)的递归调用次数少于k次。

O(log b)是该算法一个粗略的界,事实上当b确定后,Euclid(a,b)的平均迭代次数近似为(12ln2/π2)×lnb。


除了上述的Euclid算法外还有一种不用求余数运算的的二进制最大公约数算法

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics