首先是基本的最大公约数和最小公倍数,这是非常常用的,也是非常简单的,但我怎么理解了好一阵子……
求出最大公约数,最小公倍数也就出来了,求最大公约数主要有两种形式(递归,非递归),和两种算法(碾转相除,更相减损),从空间看,非递归肯定强于递归;从时间看,碾转相除要快于更相减损(以看我还以为反过来的,因为减法比除法快,后来才明白如果用更相减损,要多算好多回,完全没有优势)。
a和b要为正数,谁大谁小都行,开始我不大理解,后来发现如果a小于b,一次循环下来a和b正好互换,每次都如此,所以不用考虑两数的大小问题。
这是递归的:
本质是一样的。
有了它,最小公倍数就很容易了。
把gcd(a, b)放在中间也许因为防止a*b过大吧,从效率上看应该提高不了多少吧。