最大公约数
数学上求最大公约数一般有两种方法,辗转相除法和更向相减法:
首先来普及一下这两种数学上的方法,对接下来的算法很有帮助。辗转相除法,顾名思义,就是用除法来做的,不过这里用的是%(取余),我们假设有两个数是有最大公约数的,记为M,而这两个数就记为aM和bM,如果a>b,那么在使用辗转相除法后,所得结果便是(a-b)M,随着辗转相除,a-b最终会是1,那么便可求得M的值;同样的方法,更向相减法也是这样。
那么接下来就看一下这两种方法的效果吧:
int find_max(int x, int y)
{
while (x*y){
if (x > y){
x %= y;
}
else{
y %= x;
}
}
return x > y ? x : y;
}
while (1){
if (x > y){
x = x - y;
}
else if (y > x){
y = y - x;
}
else{// x == y
return x;
}
}
最小公倍数
最小公倍数的运算还是得经过最大公约数,如果有俩个数x,y,而且其最大公约数为M,那么起最小公倍数的运算法则是,x*y/M。
只需调用上面写的函数,最后返回x*y/M就行了。