GCD算法(最大公约数算法)解析

GCD(Great Common Divisor)算法,即所谓最大公约数算法,也称为HCF(Highest Common Factor)算法。而所谓的最大公约数,指的是几个整数中共有约数中最大的一个。如果数A可被M整除,则M就是A的约数(因数),那么如果数A、 B、 C都可被M整除,且M是可以整除这些数种最大的整数,则M就成为A B C的最大公约数,记为(A、 B、 C),如(12、15、18)=3。

求两个整数最大公约数的主要方法有如下几种:

  1. 列举法:各自列出约数,再找出最大的公约数
  2. 质因数分解法:两数各作质因数分解,然后取出同样有的项相乘起来
  3. 短除法
  4. 辗转相除法:常用于不容易判断公约数的场合

下面着重分析一下辗转相除法:

辗转相除法,又称欧几里得算法。它首次出现于欧几里得的《几何原本》中,在中国可追溯到东汉的《九章算术》。

它是基于如下的原理

两个整数的最大公约数等于其中较小的数两数的差的最大公约数。即一步步的降低两个数的值,直到其中一个变成零,这时所剩下的还没有变成零的数就是两个数的最大公约数。例如:252(21*12)和105(21*5)的最大公约数就是21,则147(252-105)和105的最大公约数也是21,然后42(147-105)和105的最大公约数也是21…………

可以发现,辗转相除法就是一种递归算法,每一步计算的输出值就是下一步计算的输入值。设k表示步骤数(从零开始计数),则计算过程如下:

GCD算法(最大公约数算法)解析_第1张图片

例子如下所示:

GCD算法(最大公约数算法)解析_第2张图片

程序伪代码如下:

function gcd(a,b)
	while b != 0
		t = b
		b = a mod b
		a = t
	return a
//减法版本
function gcd(a,b)
	if a = 0
		return b
	while b != 0
		if a > b
			a = a-b
		else 
			b = b-a
	return a
//递归版本
function gcd(a,b)
	if b = 0
		return a
	else 
		return gcd(b,a mod b)

参考文献:

[1] 维基百科

你可能感兴趣的:(gcd,最大公约数,最大因数)