给定两个数字的数组,让它们定义数字范围的开始和结束.例如,[2,6]表示范围2,3,4,5,6.我想编写
javascript代码来找到范围的最小公倍数.我的代码仅适用于小范围,不像[1,13](这是范围1,2,6,7,8,9,10,11,12,13),其中导致堆栈溢出.如何有效地找到范围的最小公倍数?
function leastCommonMultiple(arr) { var minn,max; if ( arr[0] > arr[1] ) { minn = arr[1]; max = arr[0]; } else { minn = arr[0]; max = arr[1]; } function repeatRecurse(min,max,scm) { if ( scm % min === 0 && min < max ) { return repeatRecurse(min+1,scm); } else if ( scm % min !== 0 && min < max ) { return repeatRecurse(minn,scm+max); } return scm; } return repeatRecurse(minn,max); }
解决方法
我认为这样做完成了.
function leastCommonMultiple(min,max) { function range(min,max) { var arr = []; for (var i = min; i <= max; i++) { arr.push(i); } return arr; } function gcd(a,b) { return !b ? a : gcd(b,a % b); } function lcm(a,b) { return (a * b) / gcd(a,b); } var multiple = min; range(min,max).forEach(function(n) { multiple = lcm(multiple,n); }); return multiple; } leastCommonMultiple(1,13); // => 360360