在 JavaScript 中迭代 GCD 函数
Iterating GCD function in JavaScript
我正在使用这个 JavaScript 函数来确定从输入字段获得的两个值的 GCD:
Math.GCD = function(first,second) {
if (first < 0) first = -first;
if (second < 0) second = -second;
if (second > first) {var temp = first; first = second; second = temp;}
while (true) {
first %= second;
if (first == 0) return second;
second %= first;
if (second == 0) return first;
}
};
我想扩展它来计算三个数字的 GCD,如果用户在第三个输入字段中输入一个数字(否则,用户将输入两个并按照此函数计算)。作为 JavaScript 的新手,我不确定如何将此函数扩展为三个值。有人可以帮忙吗?
Fiddle: https://jsfiddle.net/tjj7won4/1/
此外,我想以类似的方式确定 LCM,正如在 fiddle 中观察到的那样,但是,我再次不确定如何扩展给定的功能。请帮忙。
要为任意数量的参数 n
扩展函数,只需在参数数组上循环 n-1
次。
这是因为数学上gcd(a,b,c) = gcd(a,gcd(b,c))
用法:var GCDresult = Math.GCD([16,222,70]); // result: 2
.
// numbers is an array of numbers: ex. [15,20,35,170]
Math.GCD = function(numbers) {
for (var i = 1 ; i < numbers.length ; i++){
// take the next number for GCD with the first,
// and store the result back in the first.
numbers[0] = twogcd(numbers[0], numbers[i]);
}
return numbers[0];
// following is your original GCD function
function twogcd(first, second) {
if (first < 0) first = -first;
if (second < 0) second = -second;
if (second > first) {var temp = first; first = second; second = temp;}
while (true) {
first %= second;
if (first == 0) return second;
second %= first;
if (second == 0) return first;
}
}
};
您的 JSFiddle,针对 GCD 案例更新为 here。
您可以使用相同的函数来接受任意数量的参数。
你也可以扩展它:fiddle
Math.GCDe = function() {
var result = arguments[0];
for (var i=1;i<arguments.length;i++)
result = this.GCD(result,arguments[i]);
return result;
}
我正在使用这个 JavaScript 函数来确定从输入字段获得的两个值的 GCD:
Math.GCD = function(first,second) {
if (first < 0) first = -first;
if (second < 0) second = -second;
if (second > first) {var temp = first; first = second; second = temp;}
while (true) {
first %= second;
if (first == 0) return second;
second %= first;
if (second == 0) return first;
}
};
我想扩展它来计算三个数字的 GCD,如果用户在第三个输入字段中输入一个数字(否则,用户将输入两个并按照此函数计算)。作为 JavaScript 的新手,我不确定如何将此函数扩展为三个值。有人可以帮忙吗?
Fiddle: https://jsfiddle.net/tjj7won4/1/
此外,我想以类似的方式确定 LCM,正如在 fiddle 中观察到的那样,但是,我再次不确定如何扩展给定的功能。请帮忙。
要为任意数量的参数 n
扩展函数,只需在参数数组上循环 n-1
次。
这是因为数学上gcd(a,b,c) = gcd(a,gcd(b,c))
用法:var GCDresult = Math.GCD([16,222,70]); // result: 2
.
// numbers is an array of numbers: ex. [15,20,35,170]
Math.GCD = function(numbers) {
for (var i = 1 ; i < numbers.length ; i++){
// take the next number for GCD with the first,
// and store the result back in the first.
numbers[0] = twogcd(numbers[0], numbers[i]);
}
return numbers[0];
// following is your original GCD function
function twogcd(first, second) {
if (first < 0) first = -first;
if (second < 0) second = -second;
if (second > first) {var temp = first; first = second; second = temp;}
while (true) {
first %= second;
if (first == 0) return second;
second %= first;
if (second == 0) return first;
}
}
};
您的 JSFiddle,针对 GCD 案例更新为 here。
您可以使用相同的函数来接受任意数量的参数。
你也可以扩展它:fiddle
Math.GCDe = function() {
var result = arguments[0];
for (var i=1;i<arguments.length;i++)
result = this.GCD(result,arguments[i]);
return result;
}