欧几里德算法和stein算法

来源:互联网 发布:用python生成随机文件 编辑:程序博客网 时间:2024/05/17 01:43

用于计算最大公约数和最小公倍数的算法。

最小公倍数的可由最大公约数计算得到,即已知a和b的最大公约数c,那么a和b的最小公倍数为ab/c。这样就都转化为求最大公约数的问题了。


问题描述:已知正整数a,b,求它们的最大公约数gcd(a,b)。


欧几里德算法(辗转相除法):

1)使a为两数中较大的,b为较小的(a>b),计算a%b=r, 如果r等于0,那么b即为最大公约数,

2)否则令a=b, b=r,回到1)继续。


算法依赖于定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)


Stein算法:

1)如果a=0那么b为最大公约数,或b=0那么a为最大公约数。算法结束。

2)否则,如果a为偶数,b也为偶数,那么令a=a/2, b=b/2

如果a为偶数,b为奇数,那么令a=a/2,b不变

如果a为奇数,b为偶数,那么令b=b/2,a不变

如果a,b都为奇数,那么令a = |a-b|, b=MIN(a,b)

     转至1)继续。

由于算法中的除以2可以使用移位实现,判断奇偶也可以使用&1实现,所以Stein算法在实现过程中无需使用除法,效率更高。


其它(此处转自百度百科):

质因数分解法

质因数分解

  质因数分解

质因数分解法:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的最大公约数
例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,所以,(24、60)=12。
把几个数先分别分解质因数,再把各数中的全部公有的质因数和独有的质因数提取出来连乘,所得的积就是这几个数的最小公倍数
例如:求6和15的最小公倍数。先分解质因数,得6=2×3,15=3×5,6和15的全部公有的质因数是3,6独有质因数是2,15独有的质因数是5,2×3×5=30,30里面包含6的全部质因数2和3,还包含了15的全部质因数3和5,且30是6和15的公倍数中最小的一个,所以[6,15]=30。


原创粉丝点击