算法:求两个数最大公约数
原来这是欧几里德先生的发明,无知了,在此记录。
#Python 求两数最大公约数 def gcd(a,b): if b == 0: return a return gcd(b,a%b)
查了资料才明白,惭愧,理解方法:
1. 如果 a<b ,则 a%b = a,返回 gcd(b,a). 所以无论如何都会转化为gcd(a,b)且a>b
2. a一定可写为 a = kb +r ,r为余数且 r = a - kb
设最大公约数为 d ,则 a,b都能被 d 整除,则 r 定能被 d 整除。得:gcd(a,b) = gcd(b,r) = gcd(b,a%b)
可快速缩小d的取值范围
3. a,b之间差距越来越小,b能整除a,及r=0。最多步骤是除到 b = 1。
总结:思想提高效率,我还是老老实实多学算法吧。