求最大公约数-欧几里得定理
欧几里得定理简单表述为:
求两个数a,b的最大公约数
假设a<b 求 a和b 的最大公约数就是求 b和a%b 的最大公约数
特殊的,当a,b中有一个为0时,比如0,15,其最大公约数为15 可以理解为15可以整除15,0也可以整除15,所以0也是15的倍数
参考链接:欧几里得证明+最大公约数
接下来看一下代码实现
//以下两种情况都是假定a<b,不过实际传进来的a,b大小对结果无影响 int gcd(int a, int b) { return (a == 0) ? b : gcd(b % a, a); } //非递归,较多计算时耗时比上面略好 int gcd1(int a, int b) { while (a) { int t = b % a; b = a; a = t; } return b; }