笔试题中遇到了求最大公约数的算法,感觉有必要研究一下。
参考 https://www.cnblogs.com/verlen11/p/4020714.html
最简单的就是辗转相除法,在算法中用递归实现。
又叫做欧几里得算法, 公式: gcd(a,b)=gcd(b, a mod b)
即a和b的最大公约数等于b和amodb的最大公约数。
以除数和余数反复作除法运算,取当前算式除数为最大公约数。
long long gcd(long long a, long long b)
{
//当除数b为0的时候,返回a
if(b == 0) return a;
return gcd(b,a % b);
}
怎么记住?
被除数和除数的最大公约数,就是除数和两者余数的最大公约数。
左边和右边的最大公约数,就是右边和左右余数的最大公约数。
一旦除数为0,则返回被除数。
还有哪些求最大公约数的方法