最大公约数:指两个或多个整数共有约数中最大的一个
小学时候一般采用质因数分解法,一般使用短除得到结果,下面用一种最初级的方法求最大公约数
function gcd(a,b) { var result = 1; for(var i = 1; i <= a && i <= b; i++ ){ if(a%i == 0 && b%i == 0 ){ result = i; } } return result;}
使用欧里几德算法,辗转相除法
计算原理依赖于下面的定理:
定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。
function gcd(a,b){ if(b == 0){ return a; } var r = a % b; return gcd(b,r);}
【扩展】求最小公倍数:
最大公约数(gcd)和最小公倍数(lcm)的关系:
gcd(a, b) * lcm(a, b) = ab
function lcm(a, b){ return a * b / gcd(a, b);}