5 数学问题
最大公约数
记住一个定理就可以了
a,b为正整数,那么gcd(a,b) = gcd(b,a%b)
利用递归即可,递归的边界为gcd(a,0) = a;
代码如下:
int gcd(int a,int b){
return b!=0 ? gcd(b,a%b) : a;
}
最小公倍数
最小公倍数的解法是 ab/gcd(a,b),把整数看成是因子乘积很容易理解了。
为了防止整数溢出,可以先除然后再乘。
int lcm(a,b){
return a/gcd(a,b) * b;
}
分数的四则运算
这部分见p156页。