c语言课本上有求最大公约数算法(呵呵,来自于欧几里德几何学):
假设m , n 两个数(且m > n)
(1) k = m % n;
(2) if k == 0 , 最大公约数即为n;
(3) else m = n , n = k; goto (1);
算法很简单,同时也很佩服古人的聪明才智。
Euclid求最大公约数算法是对欧几里德算法的一种改进(个人认为)。由于欧几里德算法里出现了取模运算,开销比较大,所以在Euclid算法里采用了加减运算。具体算法如下:
假设m , n 两个整数(且m > n)
(1)if m < n , swap(m,n)
(2)m = m - n;
(3)if m!=0 goto (1) else break;
(4)n为最大公约数
举个例子:
m = 20 , n = 8;
m = 20 - 8 = 12;
12 > 8;
m = 12 - 8 = 4;
4 < 8;
m = 8; n = 4;
m = 8 - 4 = 4;
4 = 4;
m = 4 - 4 = 0;
result : n = 4;
分析这个算法,其实思想很简单,就是把除法改为减法了,在欧几里德算法里,采用了取模操作得到了余数,现在了,通过减法(m-n)取得了余数。
Euclid's G.C.D 求最大公约数算法
作者: 古兮之 发布时间: 2010-10-29