0

関数、変数、ループなど(基本的なもの)だけである必要があります。これまでに学んだことからコードを最初から思いつくのに苦労しています(それができるはずです)。私を本当に怒らせます:/。少しずつ教えていただければ、本当にありがたいと思います。高度なおかげでたくさん。

これよりも単純なコードで同じ結果を得るにはどうすればよいですか?

var primes=4; 
for (var counter = 2; counter <= 100; counter = counter + 1)
{
    var isPrime = 0;
    if(isPrime === 0){ 
        if(counter === 2){console.log(counter);} 
        else if(counter === 3){console.log(counter);} 
        else if(counter === 5){console.log(counter);} 
        else if(counter === 7){console.log(counter);} 
        else if(counter % 2 === 0){isPrime=0;} 
        else if(counter % 3 === 0){isPrime=0;} 
        else if(counter % 5 === 0){isPrime=0;} 
        else if(counter % 7 === 0){isPrime=0;}
        else {
            console.log(counter);
            primes = primes + 1;
        }
    }
}
console.log("Counted: "+primes+" primes");
4

6 に答える 6

7

私は今日いたずらを感じているので:

function printPrimesBetweenTwoAndOneHundredSimply(){

   var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97],
   i,
   arrayLength = primes.length;

   for(i = 0; i < arrayLength; i++){
     console.log(primes[i]);
   }

   console.log("Counted: " + arrayLength + " primes");
}
于 2012-10-12T04:48:32.677 に答える
4

まず、これを使用する必要はありません===。標準==で十分でしょう。次に、1 つの数字を除いて同じ行をすべて 1 つの行にすることができます。

var primes=4; 
for (var counter = 2; counter <= 100; counter = counter + 1)
{
    var isPrime = 0;
    if(isPrime == 0){ 
        if(counter == 2 || counter == 3 ||counter == 5 || counter == 7)console.log(counter);
        else if(counter % 2 == 0 || counter % 3 == 0 || counter % 5 == 0 || counter % 7 == 0)isPrime=0; 
        else {
            console.log(counter);
            primes = primes + 1;
        }
    }
}
console.log("Counted: "+primes+" primes");

{}また、数行で が削除されていることにも気付くでしょう。これは、if(とりわけ) に続く 1 行のコードが常にネストされていると見なされるためです。

次に、 yourprimes = primes + 1;を次のように変更できます:これは、自分自身を 1 ずつインクリメントするprimes++;ように指示するだけです。primesカウンターでも同じことができます。isPrime1 秒前に「0」に設定したため、「0」に等しいこともわかっているため、そのifステートメントはもう必要ありません。

var primes=4; 
for (var counter = 2; counter <= 100; counter++)
{
    var isPrime = 0;
    if(counter == 2 || counter == 3 ||counter == 5 || counter == 7)console.log(counter);
    else if(counter % 2 == 0 || counter % 3 == 0 || counter % 5 == 0 || counter % 7 == 0)isPrime=0; 
    else {
        console.log(counter);
        primes++;
    }
}
console.log("Counted: "+primes+" primes");

!=次に、値に対して (の代わりに)否定的なチェックを行い、 yourと your==を組み合わせることができます。否定的なチェックを行っているため (この場合)、s ( ) をs ( ) に切り替える必要があります。else ifelseOR||AND&&

var primes=4; 
for (var counter = 2; counter <= 100; counter++)
{
    if(counter == 2 || counter == 3 ||counter == 5 || counter == 7)console.log(counter);
    else if(counter % 2 != 0 && counter % 3 != 0 && counter % 5 != 0 && counter % 7 != 0) {
        console.log(counter);
        primes++;
    }
}
console.log("Counted: "+primes+" primes");

書き方は他にもたくさんありますが、最初に書いたものを使って、そこから短くした方が有益だと思いました。

于 2012-10-12T05:00:25.563 に答える
1

2から100までのすべての素数を見つける:

var primes=0; 
var isprime = true;
for (var counter = 2; counter <= 100; counter = counter + 1)
{
    // For now, we believe that it is a prime
    isprime = true;
    var limit = Math.round(Math.sqrt(counter)); // See comment from @AresAvatar, below
    // We try to find a number between 2 and limit that gives us a reminder of 0
    for (var mod = 2; mod <= limit; mod++) {
        // If we find one, we know it's not a prime
        if (counter%mod == 0) {
            isprime = false;
            break; // Break out of the inner for loop
        }
    }

    if (isprime) {
        console.log(counter, limit);
        primes = primes + 1;
    }
}
console.log("Counted: "+primes+" primes");
于 2012-10-12T04:50:58.707 に答える
0

もちろん、「より単純」は定義されていません。:-)

以下はもっと短くすることができますが、少し堅牢性が組み込まれています。

// Get primes from 0 to n. 
// n must be < 2^53
function primeSieve(n) {

  n = Number(n);
  if (n > Math.pow(2, 53) || isNaN(n) || n < 1) {
    return;
  }

  var primes = [];
  var notPrimes = {};
  var num;

  for (var i=2; i<n; i++) {
    for (var j=2; j<n/2; j++) {
      num = i*j;
      notPrimes[num] = num;
    }
    if (!(i in notPrimes)) {
      primes.push(i);
    }
  }
  return primes
} 

したがって、より少ないコードが必要な場合:

// Get primes from 0 to n. 
// n must be < 2^53
function primeSieve2(n) {
  var primes = [], notPrimes = {};
  for (var i=2; i<n; i++) { 
    for (var j=2; j<n/2; j++)
      notPrimes[i*j] = i*j;
    i in notPrimes? 0 : primes.push(i);
  }
  return primes
}
于 2012-10-12T05:31:41.923 に答える
0

これは非常に簡単です(つまり、短い):

console.log(2); console.log(3);
var m5=25, m7=49, i=5, d=2, c=2;
for( ; i<100; i+=d, d=6-d )
{
    if( i!=m5 && i!=m7) { console.log(i); c+=1; }
    if( m5 <= i ) m5+=10;
    if( m7 <= i ) m7+=14;
}
c

これは、2-3 輪分解によるエラトステネスの「展開された」ふるいです。

一方では、倍数がないように、2 と 3 と互いに素な 100 未満 (および 3 より大きい) のすべての数値を 5+2+4+2+4+... の部分和として列挙します。このように列挙された数のうち、2 と 3 のいずれかです。

一方、5 と 7 の倍数はすべて 25+10+10+10+... と 49+14+14+14+... の部分和として列挙することにより、それらの中からすべて破棄します。2 と 3 の倍数はそもそも存在せず、エラトステネスのふるいによって捨てる必要がある 11 の最初の倍数は 121 です。

于 2012-10-14T00:48:58.373 に答える
-3

これはあなたの質問にとってより簡単になります....

 for (int i = 2; i < 100; i++) {
int j = 0;
for (j = 2; j < i; j++)
    if ((i % j) == 0)break;
        if (i == j)
        System.out.print("  " + i);}
于 2012-10-12T07:15:11.993 に答える