最大公约数
一般用gcd(a,b)来表示a和b的最大公约数,而求解最大公约数常用欧几里得算法(即辗转相除法)
如果a<b,那么定理的结果就是将a和b交换;如果a>b,那么通过这个定理总可以将数据规模变小,并且减小的非常快。只是还需要一个东西:递归边界。总所周知:0和任何一个整数a的最大公约数都是a(注意不是0)
于是可以得到下面的求解最大公约数的代码:
最小公倍数
一般用lcm(a,b)来表示a和b的最小公倍数。最小公倍数的求解在最大公约数的基础上进行,当得到a和b的最大公约数d之后,可以马上得到a和b的最小公倍数ab/d。
由于ab在实际计算时有可能溢出,因此更恰当的写法是a/d*b。