-2

このコードは、多くの非素数を誤って素数として計算しますが、その理由はわかりません。基本的に、出力は入力に対して「プライム」と「非プライム」を交互に使用します。

#!/usr/bin/env node

for (var i = 3; i <= 30; i++) {
  console.log(i + ": " + isPrime(i) + " ");
}

function isPrime(num) {
  var counter;

  for (counter = 2; counter < num; counter++) {
    if(num % counter == 0) {
      return "not prime";
    }
    else {
      return "prime";
    }
  }
}
4

5 に答える 5

0

ループ内ではなく、ループ後に true を返す必要があります。たとえば、数字は 9 です。最初の反復 if(9%2 == 0)-false そうでなければ素数を返します。しかし、9 は素数ではありません。繰り返しを行った後にのみ true を返すと、期待される結果が得られます。

function isPrime(num) {
var counter;

for (counter = 2; counter < num; counter++) {
if(num % counter == 0) {
  return " not prime";
}
}
  return " prime";
}
于 2013-06-28T19:50:04.673 に答える
0

フィドル

ループがチェックで完了した後、素数を返す必要があります

for (var i = 3; i <= 30; i++) {
  console.log(i + ": " + isPrime(i) + " ");
}

function isPrime(num) {
  var counter;

  for (counter = 2; counter < num; counter++) {
    if(num % counter == 0) {
     return "not prime";
    }
  }
  return "prime";

}
于 2013-06-28T19:50:07.390 に答える
0
for (var i = 3; i <= 30; i++) {
  console.log(i + ": " + isPrime(i) + " ");
}

function isPrime(num) {
  var counter;

  for (counter = 2; counter < num; counter++) {
    if(num % counter == 0) {
      return "not prime";
    }
  }
  // only return that it is prime if it is not evenly
  // divisible by all numbers less than it
  // (technically you only need to check up to sqrt(num) + 1)
  return "prime";
}
于 2013-06-28T19:45:49.840 に答える