我试图弄清楚如何在javascript中计算lcm和gcd(主要是最大公因数),或者如果更容易的话,jquery。我已经搜索了互联网,但我发现最好的是:
function MCD(){
if (arguments.length<2) return false;
if (arguments.length==2)return (arguments[1]==0?arguments[0]:MCD(arguments[1],arguments[0]%arguments[1]));
var arr=[].splice.call(arguments,0);
arr.splice(0,2,MCD(arr[0],arr[1]));
return MCD.apply(window,arr);
}
function mcm(a,b){
if (arguments.length<2) return false;
if (arguments.length==2)return arguments[0]*arguments[1]/MCD(arguments[0],arguments[1]);
var arr=[].splice.call(arguments,0);
arr.splice(0,2,mcm(arr[0],arr[1]));
return mcm.apply(window,arr);
}
console.log(MCD(36, 12, 96));//Esto es lo que quiero cambiar
console.log(mcm.apply(window,[36, 12, 96]));//Esto es lo que quiero cambiar
console.log(MCD(
36、12、96));
编辑:“基本上,我希望从输入中获取数字 36、12、96,但是我已尝试使用 document.getElementById().value,但它不起作用”提前致谢。^-^
正如我在评论中告诉你的,
input
HTML 元素string
在它们的属性中存储了一个类型值value
。因此,您必须执行一系列操作来转换从input
.问题
单个类型元素可
input
用于输入 1、2、3 或更多以逗号分隔的数值。这些值将作为参数发送给最小公倍数和最小公约数函数。解决方案
我们必须创建一个函数来提取元素中输入的数字
input
。我们将使用循环for
和 Javascript 方法substring()
,以及parseInt()
. 我们还将使用该方法apply
将参数传递给函数MCD
和mcm
.在 HTML 代码中,我
required
向输入添加了一个标签,以及一个pattern
带有正则表达式的标签,用于验证输入是否仅包含 0 到 9 的数字和逗号,它也只允许在开头和结尾的数字字符串,这是为了不要破坏提取数字的函数的逻辑。结论
使用Javascript
apply
对象方法Function
,我们可以使用数组将参数传递给我们的函数。这是动态使用参数的一种非常方便的方法。此处展示的示例演示了该方法的多功能性,因为我们可以传递由逗号分隔的大量数字列表,而无需为元素数量的每次更改编写调用。
参考:
Function.prototype.apply()
HTML 模式属性
理论:借助GCD(最大公约数),我们可以通过欧几里得公式得到LCM(最小公倍数):(a * b) / gcd(a,b) = lcm
应该记住,要找到 GCF,您必须搜索两个数字中最大的一个,在这种情况下,两个模块都为零。(num1%i==0 && num2%i==0),仅循环到两个数字中较小的一个 (6, 10) i=1, i<6。
下一个:
如果非要找到两个以上数字的LCM,可以调整以上方法。
例如,要找到 16、20 和 32 的 LCM,您可以先找到 16 和 20(即 80)的 LCM,然后找到 80 和 32 的 LCM,结果是 160。
此代码既可以单独使用,也可以通过输入带有数字的数组来工作。
基本上,它询问用户他想搜索多少个数字,然后通过键盘以数组的形式询问它们。
用户输入:8 个最高数字,填写 8 个数字。(用户选择)
输出:
Array(8) [ 8, 16, 36, 56, 76, 80, 92, 124 ]的最小公倍数 (LCM)
是:68276880
检查:https://es.symbolab.com/solver/lcm-calculator/mcm%208%2C%2016%2C%2036%2C%2056%2C%2076%2C%2080%2C%2092%2C%20124?或=输入
我认为你应该取集合的 2 max small 值并找到 gcd,利用递归函数:
函数 gcd(a,b){
}