本文实例讲述了Python实现的求解最大公约数算法。分享给大家供大家参考,具体如下:
使用Python求解两个数的最大公约数的时候用到了前面介绍的分解质因式。其实,我写分解质因式程序的时候就是因为发现在实现最大公约数求解的过程中用到了这个功能。
比较令我开心的是之前学的一点Python集合处理功能居然在这个时候也派上了用场,小程序的完成让人感觉比较舒心。
代码实现如下:
#!/usr/bin/pythonfrom collections import Counterdef PrimeNum(num): r_value =[] for i inrange(2,num+1): for jin range(2,i): if i % j == 0: break else: r_value.append(i) return r_valuedef PrimeFactorSolve(num,prime_list): for n inprime_list: if num % n == 0: return [n,num / n]def PrimeDivisor(num): num_temp =num prime_range= PrimeNum(num) ret_value =[] while numnot in prime_range: factor_list= PrimeFactorSolve(num,prime_range) ret_value.append(factor_list[0]) num =factor_list[1] else: ret_value.append(num) return Counter(ret_value)def MaxDivisor(num1,num2): dict1 =PrimeDivisor(num1) dict2 =PrimeDivisor(num2) max_divisor= 1 for key1 indict1: if key1 in dict2: if dict1[key1] < dict2[key1]: max_divisor*= (key1 ** dict1[key1]) else: max_divisor*= (key1 ** dict2[key1]) return max_divisorprint(MaxDivisor(12,18))print(MaxDivisor(7,2))print(MaxDivisor(7,13))print(MaxDivisor(24,56))print(MaxDivisor(63,81))
程序的执行结果如下:
E:WorkSpace 1_编程语言 3_Pythonmath>python max_divisor.py
6
1
1
8
9
通过验证,计算结果准确。
PS:这里再为大家推荐一款本站相关在线工具供大家参考:
在线最小公倍数/最大公约数计算工具:
http://tools.jb51.net/jisuanqi/gbs_gys_calc
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
您可能感兴趣的文章:
- Java求解两个非负整数最大公约数算法【循环法与递归法】
- 详解C语言求两个数的最大公约数及最小公倍数的方法
- C#获取两个数的最大公约数和最小公倍数示例
- 递归法求最大公约数和最小公倍数的实现代码
- C++ 实现求最大公约数和最小公倍数
- JavaScript随机打乱数组顺序之随机洗牌算法
- 浅析JavaScript中的常用算法与函数
- JavaScript实现的一个计算数字步数的算法分享
- JavaScript数据结构和算法之图和图算法
- JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
- JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】