对于辗转相除法的证明:https://blog.csdn.net/er111er/article/details/79251895
原作者写得很棒。

	def gcd(a,b):
		return a if b==0 else gcd(b,a%b)

首先核心在于:a和b的最大公约数等价于b和a对b求余的最大公约数。
感性理解,假设存在最大公约数M,那么a是M的倍数,b是M的倍数,那么a和b的线性组合也是M的倍数。
所以a对b的余数是线性组合的一种,那么也是M的倍数,更重要的是a对b的余数小于a和b(a>b的时候),这样就使得问题可以递归求解。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐