您的位置:首页 > 其它

求最大公约数算法(欧几里得算法)的实现!!!

2016-03-04 20:29 337 查看
看一个例子:试找出40和64的最大公约数

64 ÷ 40 = 1 ⋯⋯ 24
40 ÷ 24 = 1 ⋯⋯ 16
24 ÷ 16 = 1 ⋯⋯ 8
16 ÷ 8 = 2 ⋯⋯ 0
得到余数为0就以为着我们算到这一步就可以了。我们使用的最后一个余数是8,因此40和64的最大公约数就是8。

根据上图写一个递归函数来求解最大公约数

以被除数为a, 除数为b, 余数为ca ÷b = ...余 c ( c = a%b )

再将b作为被除数 , 余数作为除数...一直循环下去直到余数为0时,

最后一个除数就是答案

这就是欧几里得算法

递归边界:除数b为0, 那么获得这个新除数的a (这个a是上一个式子中的a%b),就是答案!

递归部分:除数b不为0 , 下一个式子的被除数是当前式子的除数b,

     下一个式子的除数是当前式子的余数(a%b)

这样就可以写出一个递归函数:

int gcd(int a, int b) {

   if(b == 0) return a; //递归函数先写边界

   else return gcd(b, a%b); //再写递归的内容

}

再精简一下:

求最大公约数:

int gcd(int a, int b) {
return b == 0 ? a : (b, a%b);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: