今天,我们梳理下使用Python求两数最大公约数的方法。
好了,废话不说,我们直接梳理四种方法:分别为辗转相除法、辗转相减法、枚举法和欧几里得算法。我们逐个进行分析。在分析之前,先欣赏一幅美景缓解下心情。。。
黄河美景
辗转相除法(while循环实现)
两数求余temp = p % qtemp = 0时,q为最大公约数temp !=0时,p = q;q = temp注:该循环的是否继续的判断条件就是temp是否为0源代码如下图:
辗转相除法()
辗转相减法
如果p > q ,p = p - q如果q > p ,q = q - p假如p = q ,则 p或q 是最大公约数如果p != q,则继续继续相减,直至p = q源代码如下图所示
辗转相
枚举法
将两数p,q中最小的放到smaller中用p,q分别对i(1到smaller之间)求余数,看是否能被整除直到p,q同时被i整除如不能整除,i+1后继续,直到i等于smaller
枚举法
欧几里得算法(辗转相除的递归实现)
该方法其实就是辗转相除法的递归版本实现
如果q=0,返回p;判断p>q如果p>q,则p、q的最大公约数等于q与p%q的最大公约数,以此递归源代码如下图
欧几里得算法
怎么样,是不是最后一种比较占优势?代码量少,而且运行速度也适中,但是到p、q之间差距较大(很大很大……)时,可能递归就不太占优势,这又牵扯到程序性能问题了,我们以后的章节中会和大家进行探讨,欢迎留言讨论,转载请注明出处(百家号:Python高手养成)