求最大公约数
笔试遇到的题目中要求两数的最大公约数。
高中的知识,高效又普遍的方法是辗转相除法(欧几里得法)。
辗转相除法的原理:
假设用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)