用于计算最大公约数和最小公倍数的算法。
最小公倍数的可由最大公约数计算得到,即已知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算法在实现过程中无需使用除法,效率更高。
其它(此处转自百度百科):