2017-10-02 3 views
0

私は素数を見つけるためにJavaScriptでコードを書いています。JavaScriptの素数

私は配列(var arr)を作成し、その中に最初の素数を入れました。

私は最後プライム配列に格納された番号でi値をチェックする(の代わりに、より高速な実行のためのすべての番号。)

は私のコードをチェックアウトし、私の構文を修正してください。

var arr = [2]; 
 
document.getElementById("demo").innerHTML = arr; 
 

 
function myFunction() { 
 

 
for (i = 3; i <= 10; i++) { 
 
    if (i % 2 !==0) { 
 
     for (j = 0; j <= arr.length - 1; j++){ 
 
      if (i % arr[j] !== 0) { 
 
       arr.push(i); 
 
      } 
 
     } 
 
     document.getElementById("demo").innerHTML = arr;  
 
    } 
 
}

答えて

1

OPによって提案アルゴリズムは、コードを修正した後2,3,5,7の期待される結果を生成するために2から10までの数字の限定された範囲で動作していても、問題を有していてもよいです。数値の範囲が拡大された場合に以下に示すように残念なことに、その後 非素数は、でクリープができる:

var arr = [2]; 
 

 
function myFunction() { 
 

 
    for (i = 3; i <= 30; i++) { 
 
     if (i % 2 !==0 && i % Math.sqrt(i) !==0) { 
 
      for (j = 0; j <= arr.length - 1; j++){ 
 
       if (i % arr[j] !== 0) { 
 
        arr.push(i); 
 
       } 
 
       break; 
 
      } 
 
     } 
 
    } 
 
    document.getElementById("demo").innerHTML = arr; 
 
} 
 
myFunction();
<div id="demo"></div>

次のコードは、あまり効率的かもしれないが、逆にそれことです数字の範囲がどれほど大きくても問題ありません。解は、herehereから借りて変更されたコードに由来します。

var arr = [2]; 
 

 
function isPrime(n) { 
 

 
    
 
    // eliminate non-integers 
 
    if ( n != Math.round(n) ) { 
 
     return false; 
 
    } 
 
    
 
    // assume n is prime and test if true 
 
    for(var i=2, max=Math.sqrt(n); i <= max; i++) { 
 
     if (n % i === 0) { 
 
      return false; 
 
     } 
 
    } 
 
    return n > 1; 
 
} 
 

 
function myFunction() { 
 

 
    for (i = 3; i <= 30; i++) { 
 
     if (isPrime(i)) { 
 
      arr.push(i); 
 
     }// end-if 
 
    }// end-for 
 
    document.getElementById("demo").innerHTML = arr; 
 
} 
 

 
myFunction();
<div id="demo"></div>

注、アレイは素数2で最初に開始され、コードが指定された範囲内素数に遭遇するように、それらをアレイに追加されます。ちなみに、これを動作させるには、 "demo"というIDを持つHTML DIVタグが必要です。また、ループが処理を終えた後で、div要素のinnerHTMLプロパティに配列を割り当てるだけで済みます。最後に、myFunction()を呼び出す必要があります。

おもしろい関連ディスカッションhere

+0

このコードは元のコードよりも効率が悪く、ループ用にネストされている必要があります。 –

+0

@BJMyers OPコードを実行しましたか?それが間違っていると効率はどれくらいですか? – slevy1

関連する問題