求最大公约数

笔试遇到的题目中要求两数的最大公约数
高中的知识,高效又普遍的方法是辗转相除法(欧几里得法)。

辗转相除法的原理:
假设用f(x, y)表示\(x\)\(y\)的最大公约数,取k = x/y,b = x%y,则\(x = ky + b\)
如果一个数能够同时整除\(x\)\(y\),则必能同时整除\(b\)\(y\);而能够同时整除\(b\)\(y\)的数也必能同时整除\(x\)\(y\)
\(x\)\(y\)的公约数与\(b\)\(y\)的公约数是相同的,其最大公约数也是相同的,则有f(x, y)= f(y, x%y)(y > 0),
如此便可把原问题转化为求两个更小数的最大公约数,直到其中一个数为0,剩下的另外一个数就是两者最大的公约数。
 

#coding=utf8

#求最大公约数
#辗转相除法
def gcd(a,b):
	if a<b:
		a,b=b,a
	while b!=0:
		temp=a%b
		a=b
		b=temp
	return a

if __name__ == '__main__':
	print gcd(100,105)

posted @ 2015-10-10 09:11  clq.lib  阅读(231)  评论(0编辑  收藏  举报