最近在做奥赛题时碰到求最大公约数的问题,给出解决方案:
int gcd(int a,int b){ int tmp = a%b; ){ return b; } else{ return gcd(b,tmp); } }
使用递归的方法能有效缩短代码长度,达到目的。
欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。算法是用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。贴张图: