python最小公倍数与最大公约
来源:互联网 发布:网络远程教育报名 编辑:程序博客网 时间:2024/04/29 08:22
遍历法
m=int(raw_input('please input a integer m'))n=int(raw_input('please input a integer n'))import sys, osfrom time import clockstart = clock()if m<n: m,n = n,mq = 1max = 1tiple = m*nfor i in range(2,n+1): if(n%i == 0 and m%i == 0): max = iprint 'The max common divisor is %s'%maxprint 'The min common multiple is %s'%(tiple/max)
print "End At: " + str((clock()-start)*1000)
通过遍历最小值n来计算出最大公约数max
而最小公倍数为 (m/max) *( n/max) *max =m*n/max
辗转相除法
如果数过大,则计算时间又太长,欧几里得提出的辗转相除法则可以大幅度降低运算时间。
即两个数的最大公约数,为两数中最小数和两数相除所得余数的最大公约数。
m= p1*n+q1
n=p2*q1+p2
...
当pn为0时得到最大公约数
上文的循环可改为
while q!=0: q = m % n m = n n = q<span style="white-space:pre"></span> max = m
m就是最大公约数
更相减损法
更相减损法:也叫更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。
《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”
翻译成现代语言如下:
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
翻译成现代语言如下:
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
即 q1=m-n
q2=n-q1
...
while q!=0: if m < n:m,n = n,m q = m - n m = n n = q<span style="white-space:pre"></span> max = m<span style="white-space:pre"></span>m为最大公约数
算法效率
若计算17 234 500和12 483 721的最小公倍数和最大公约数 1千万与1千万
计算 9 876 543 210和12 345 678的最小公倍数和最大公约数 98亿与1千万
计算 9 876 543 210和 988 543 214的最小公倍数和最大公约数 98亿与9亿
n个数的最大公约数
求n个数的最大公约数时,可以先求第1、2个数的最大公约数q1,再求q1与第3个数的最大公约数q2,....求q(n-2)与n的最大公约数q(n-1)即可
或者采用2分法对数进行分组,求各个组的最大公约数,q1,q2... q1,q2的最大公约数即为n个数的最大公约数
0 0
- python最小公倍数与最大公约
- 最大公约最小公倍数算法
- 最大公约最小公倍数
- 拓展:求三个数的最大公约与最小公倍数
- C++实验7-最大公约和最小公倍数
- 实验七-最大公约和和最小公倍数
- c++实验7--最大公约和和最小公倍数
- C++实验7——最大公约和最小公倍数
- C++实验7——最大公约和和最小公倍数
- C++实验7-最大公约和和最小公倍数
- C++第七次实验(最大公约和和最小公倍数)
- C++实验7——最大公约和和最小公倍数
- c++实验七—最大公约和和最小公倍数
- C++实验7--项目2:最大公约和和最小公倍数
- c++实验7-最大公约和和最小公倍数
- C++实验7-最大公约和和最小公倍数
- C++实验7-最大公约和和最小公倍数
- HDOJ1019最大公约与最小公倍
- 【水读入】#56 A. Where Are My Flakes?
- 微课件快速开发方案
- JSTL EL 遍历后台的Map
- python 两数相除求频率
- easyui tree的一些常见操作
- python最小公倍数与最大公约
- typedef介绍
- iOS 发送邮件、打电话的调用
- (双向链表之数组模拟)Boxes in a Line,第九届湖南省赛,B题
- Cocos2d-x 瓦块地图小游戏 (一)Tiled
- springMVC返回地址乱码
- 用CSS3的圆角border-radius属性,画一个圆形
- linux下进程的最大线程数、进程最大数、进程打开的文件数
- jconsole监控activemq