两个数的最大公约数(GCD)、最小公倍数(LCM)用上面两个算法实现非常简单。那么如果是同时求多个数的呢?
首先约定两个数的最大公约数的函数为gcd
,最小公倍数的函数为lcm
。
多个数的最大公约数算法
- 自然而然会想到用逐轮用2个数计算,将上一步的最大公约数与下一个数继续计算,直到计算完所有数。
function multi_gcd_step() {
// 拿到参数,并都转成正数
let arr = Array.from(arguments).map(a => Math.abs(a));
// 参数非法过滤
if (arr.length < 2) {
throw new Error('参数个数不能少于2');
}
if (arr.some(a => !a)) {
throw new Error('参数不能包含0');
}
for (let i = 0; i < arr.length - 1; i++) {
let c = gcd</