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ます。

私の理解では、実際に探しているのは、提供された引数の最小公倍数です。これはかなり単純な操作です。これを行う 1 つの方法を次に示します。ヘルパー関数を使用して数値のペアの 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] で割り切れるかどうかを判断する関数を作成することを示しているようです。

エラトステネスのふるいのようなものを使用して、可能な数をそれぞれクエリするのを避け、代わりに適合する数のリストを作成する方が効率的だと思います。

元の入力を各値のすべての素約数に拡張してから、重複を破棄します。それ以降、素数配列 [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 に答える