我们需要编写一个接受两个数字并返回其最小公倍数的函数。
两个数字a和b的最小公倍数是可被a和b整除的最小正整数。
例如-6和8的LCM为24,因为24是被6和8除的最小正整数。
计算两个数字a和b的LCM的许多方法之一是将a和b的乘积除以最大整数(也称为最大公因数或GCD),该整数将a和b均除。
在6和8的情况下,它们的乘积为48,将它们两个相除的最大整数为2,因此它们的LCM为-
(6*8)/2 = 24
弄清楚这些事情之后,现在让我们转到编码部分-
const lcm = (a, b) => { let min = Math.min(a, b); while(min >= 2){ if(a % min === 0 && b % min === 0){ return (a*b)/min; }; min--; }; return (a*b); }; console.log(lcm(6, 8)); console.log(lcm(16, 18)); console.log(lcm(0, 8)); console.log(lcm(11, 28)); console.log(lcm(18, 34));
由于精确地将两个数字相除的最大整数仍将小于或等于两个数字中的较小者,因此我们正在计算LCM,因此我们从较小的数字一直到2进行递减循环。
如果在迭代中找到任何能将这两个数相除的数字,那么我们可以保证它是最大的将这两个数相除的数字,因为我们处于一个递减循环中,因此我们随即返回LCM。
如果我们遍历完整的数字,则意味着我们找不到任何这样的数字,而1是唯一将两者均除的数字(换句话说,数字是互质的),因此我们只返回它们的乘积。
输出结果
控制台中的输出将为-
24 144 0 308 306