2

我从学习代码中休息了一段时间。我回来了,一切都从我的脑海中消失了。我想制作一个简单的程序来查找可被任何整数整除的数字(例如可被 5、6、9、10 或 4、7、25 整除)

到目前为止我做了这个:

var multipleOf = function() {
    for (var i = 1; i < 1000; i*2) {
        if (i%3 === 0) {
            if (i%4 === 0) {
                if (i%5 === 0) {
                    return(i);
                }
            }
        }
    }
};

但是有几个问题。它似乎没有按原样工作(我认为一些 python 可能会滑入其中)它不可扩展,我必须为不同数量的数字更改代码(例如,所有素数 1-100 将是很多编码,而不是仅仅输入数字)

有人可以帮我制作可以像这样运行的代码:

console.log(multipleOf(2,5,8,12,15,17,20))
4

3 回答 3

3

JavaScript 有一个巧妙的东西可以松散地定义参数,恰当地命名为arguments.

据我了解,您实际上要查找的是所提供参数的最小公倍数,这是一个相当简单的操作。这是一种方法,使用辅助函数来计算一对数字的 LCM,而这又需要一个函数来计算它们的 GCD。

function multipleOf() {
    function gcf(a, b) { 
        return ( b == 0 ) ? a : gcf(b, a % b); 
    }
    function lcm(a, b) { 
        return a * b / gcf(a,b); 
    }
    function recurse(ar) {
        if (ar.length > 1) {
            // take the first two numbers, caculate their LCM, and put the result
            // back into the stack. Reduces array length by 1.
            ar.push( lcm( ar.shift() , ar.shift() ) );
            return recurse( ar );
        }
        else return ar[0];
    }
    // take arguments and build an array
    // arguments is an array-like object, but it doesn't have methods
    // such as `shift` or `push`, required for `recurse`
    // take this opportunity to ensure we have numbers.
    var ar = [], l = arguments.length, i;
    for( i=0; i<l; i++) ar[i] = parseInt(arguments[i],10);
    return recurse(ar);
}
于 2013-11-03T14:02:52.077 回答
0

到目前为止,这些解决方案似乎指向构建一个函数来判断数字 X 是否可以被整数数组 [a,b,c,d] 整除。

我相信使用像Eratostenes 筛子这样的东西来避免查询每个可能的数字,而是建立一个符合要求的数字列表会更有效。

我将开始将原始输入扩展到每个值的每个主要除数,然后丢弃重复项。从那时起,我们知道素数数组 [a,b,c] 的所有倍数都以

Math.pow(a,x) * Math.pow(b,y) * Math.pow(c,z)

唯一尚未定义的逻辑是,我应该以什么顺序碰撞每个权力以找到下一个数字。

于 2013-11-03T14:21:20.060 回答
-1

您可以传递一个数组而不是多个编号。

var multipleOf = function(nos) {
   for(var i=0; i< nos.length; i++) {
       // Now you can use,
      //nos[i]; to access each passed integer.
   }
};

var nos = [2,5,8,12,15,17,20];

multipleof(nos);

或者您可以使用arguments

var multipleOf = function() {
   // Loop through arguments
   for(var i=0; i< arguments.length; i++) {
      // Now you can use,
      //arguments[i]; to access each passed integer.

   }
};

multipleOf(2,5,8,12,15,17,20);

iearguments是一种特殊类型的数组(虽然它不是真正的实际),您可以循环遍历它以接受传递的参数。

于 2013-11-03T14:02:59.060 回答