Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1308660
  • 博文数量: 268
  • 博客积分: 10698
  • 博客等级: 上将
  • 技术积分: 2867
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-14 22:21
文章分类

全部博文(268)

文章存档

2012年(19)

2011年(13)

2010年(29)

2009年(26)

2008年(99)

2007年(82)

我的朋友

分类: Python/Ruby

2008-01-09 09:33:00

欧几里得算法是计算两个整数的最大公约数,把a与b相除,得到余数后,把b赋值给a,余数赋值给b,a与b再相除,. . . 如此反复,即可得到最大公约数gcd。用Python可以作出如下函数:

def gcd (a, b):
  r = a % b
  while r > 0:
    print a, b, r
    a, b, r = b, r, b%r
  return b

也可以用另外一种方式来实现欧几里得算法,如果a能被b整除,那么b就是两数的公约数;如果a不能被b整除,那么有a=qb+r,q是商,r是余数,那么 0 <= r < b,如果一个数能够整除a和b,那么它就能整除b和r,也就是说gcd(a,b)=gcd(b,r),用递归法来作:

def gcd2 (a, b):
  r = a % b
  while r == 0:
    return b
  else:
    return gcd2 (b, r)
阅读(2395) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~