Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41488
  • 博文数量: 21
  • 博客积分: 825
  • 博客等级: 准尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-06 18:08
文章分类

全部博文(21)

文章存档

2011年(1)

2010年(20)

我的朋友

分类: C/C++

2010-10-29 15:52:27

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)取得了余数。
阅读(564) | 评论(1) | 转发(0) |
0

上一篇:打印环绕数

下一篇:HelloWorld-Can not find Main

给主人留下些什么吧!~~

chinaunix网友2010-10-29 20:26:14

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com