使用欧几里德算法的数组值的最小公倍数
Least Common Multiple of an array values using Euclidean Algorithm
我想使用欧氏算法计算值数组的最小公倍数
我正在使用这个伪代码实现:在 wikipedia
上找到
function gcd(a, b)
while b ≠ 0
t := b;
b := a mod b;
a := t;
return a;
我的javascript实现是这样的
function smallestCommons(arr) {
var gcm = arr.reduce(function(a,b){
let minNum = Math.min(a,b);
let maxNum = Math.max(a,b);
var placeHolder = 0;
while(minNum!==0){
placeHolder = maxNum;
maxNum = minNum;
minNum = placeHolder%minNum;
}
return (a*b)/(minNum);
},1);
return gcm;
}
smallestCommons([1,2,3,4,5]);
我在 whileloop 上遇到错误
Infinite loop
EDIT 进行了一些更正,在 gcm 函数的末尾,我使用 0 作为初始值,它应该是 1,因为你不能有 gcm从 0.
EDIT2 预期的输出应该是 60,因为那是 1,2,3,4,5
的最小公倍数
你是不是故意把所有的变量和运算符序列都弄乱了? ;-)
while(minNum!==0){
placeHolder = minNum;
minNum = maxNum % minNum;
maxNum = placeHolder;
}
//here maxNum = GCD(a,b)
return (a*b) / (maxNum); //LCM
使用 ES6
const gcd = (a, b) => a ? gcd(b % a, a) : b;
const lcm = (a, b) => a * b / gcd(a, b);
然后对给定的整数数组使用 reduce:
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60
使用 ES5
var gcd = function (a, b) {
return a ? gcd(b % a, a) : b;
}
var lcm = function (a, b) {
return a * b / gcd(a, b);
}
然后对给定的整数数组使用 reduce:
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60
我想使用欧氏算法计算值数组的最小公倍数
我正在使用这个伪代码实现:在 wikipedia
上找到function gcd(a, b)
while b ≠ 0
t := b;
b := a mod b;
a := t;
return a;
我的javascript实现是这样的
function smallestCommons(arr) {
var gcm = arr.reduce(function(a,b){
let minNum = Math.min(a,b);
let maxNum = Math.max(a,b);
var placeHolder = 0;
while(minNum!==0){
placeHolder = maxNum;
maxNum = minNum;
minNum = placeHolder%minNum;
}
return (a*b)/(minNum);
},1);
return gcm;
}
smallestCommons([1,2,3,4,5]);
我在 whileloop 上遇到错误
Infinite loop
EDIT 进行了一些更正,在 gcm 函数的末尾,我使用 0 作为初始值,它应该是 1,因为你不能有 gcm从 0.
EDIT2 预期的输出应该是 60,因为那是 1,2,3,4,5
的最小公倍数你是不是故意把所有的变量和运算符序列都弄乱了? ;-)
while(minNum!==0){
placeHolder = minNum;
minNum = maxNum % minNum;
maxNum = placeHolder;
}
//here maxNum = GCD(a,b)
return (a*b) / (maxNum); //LCM
使用 ES6
const gcd = (a, b) => a ? gcd(b % a, a) : b;
const lcm = (a, b) => a * b / gcd(a, b);
然后对给定的整数数组使用 reduce:
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60
使用 ES5
var gcd = function (a, b) {
return a ? gcd(b % a, a) : b;
}
var lcm = function (a, b) {
return a * b / gcd(a, b);
}
然后对给定的整数数组使用 reduce:
[1, 2, 3, 4, 5].reduce(lcm); // Returns 60