forEachループの使用Javascriptで1〜50の素数を生成する[重複]

Aug 20 2020

これが私のコードですが、私の答えは私が望むものではありません。

これを確認して、Foreach Loop b / w1-50を使用して素数を取得するための解決策を教えてください

前もって感謝します :)

function isPrime(num) {
    for ( var i = 2; i < num; i++ ) {
        if ( num % i === 0 ) {
            return false;
        }
    }
    return true;
}
    var txt = "";
    function shown(n) {
        var arr = [2];
        arr.forEach(myFunction);

document.getElementById("foreach").innerHTML = txt;
// document.getElementById('forLoop').innerHTML = arr; // use arr result on your own
}
function myFunction(arr, index, array) {

var i;
var arr = [2];

if ( isPrime(i) ) {
    arr.push(i);
      }
  txt += arr + "<br>"; 
}

shown(50);

回答

1 KoalaYeung Aug 20 2020 at 14:07

これはおそらくこのレベルの宿題にはあまりにも高度な答えですが、技術的にはルールに従い(Array.forEachを使用)、機能します。

primes()、以前の素数に基づいて新しい素数を生成します。したがって、すべての整数のリマインダーをテストするわけではないため、より効率的です。物事を短くするために、いくつかの矢印関数の使用法もあります。実際にこの回答を使用する場合は、関連するドキュメントを読んで、次のことを学んでください。

  • イテレータとジェネレータ
  • 矢印関数式
  • テンプレートリテラル

真剣に、段階的に考えてみてください。それはあなたが何かを学ぶ方法です。

function* primes() {
  const previous = [];

  for (let i = 2; true; i++) {
    let isPrime = true;
    for (let p of previous) {
      if (i % p === 0) {
        isPrime = false;
        break;
      }
    }
    if (isPrime) {
      previous.push(i);
      yield i;
    }
  }
}

function* takeUntil(cb, iter) {
  for (let val of iter) {
    if (cb(val)) {
      return;
    }
    yield val;
  }
}

function showArrayIn(arr, container) {
  arr.forEach(p => container.innerHTML += `${p},<br/>`); // technically, we used Array.forEach.
}

showArrayIn(
  // get the prime number array declarativly 
  Array.from(takeUntil(n => n >= 50, primes())),
  // show in the container specified
  document.getElementById("results")
);
Primes:
<div id="results"></div>

NikhileshAgrawal Aug 20 2020 at 12:54
function primeFactorsTo(max)
{
    var store  = [], i, j, primes = [];
    for (i = 2; i <= max; ++i) 
    {
        if (!store [i]) 
          {
            primes.push(i);
            for (j = i << 1; j <= max; j += i) 
            {
                store[j] = true;
            }
        }
    }
    return primes;
}

console.log(primeFactorsTo(5));

console.log(primeFactorsTo(15));
raoabdullah07 Aug 20 2020 at 13:55

私はこれが私に値する正しい答えだと思います..それは短くて攻撃的なコード愛好家です

function primes(limit)
{
  var prime=[], i=1;
  while (++i < limit+1) prime.reduce((a,c)=>(i%c)*a,1) && prime.push(i);
  prime.unshift(2);
  return prime;
}
[50].forEach(n=>document.getElementById('foreach').innerHTML=(`${primes(n)}`));
Twisty Aug 20 2020 at 12:54

次の例を考えてみましょう。

function isPrime(num) {
  if (num === 1) {
    return false;
  } else if (num === 2) {
    return true;
  } else {
    for (var x = 2; x < num; x++) {
      if (num % x === 0) {
        return false;
      }
    }
    return true;
  }
}

function shown(n) {
  var list = [];
  for (var i = 1; i <= n; i++) {
    list.push(i);
  }
  list.slice().reverse().forEach(function(n, k, o) {
    if (!isPrime(n)) {
      list.splice(o.length - 1 - k, 1);
    }
  });
  document.getElementById("show").innerHTML = list;
}

shown(50);
Prime: <p id="show"></p>