【问题标题】:Using forEach Loop Generating prime number in Javascript between 1 to 50 [duplicate]使用forEach循环在Javascript中生成1到50之间的素数[重复]
【发布时间】:2020-08-20 05:28:10
【问题描述】:

这是我的代码,但我的答案不是我想要的..

请检查这个并给我一个使用 Foreach Loop b/w 1-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);

【问题讨论】:

  • 可以先在这里试试:meta.stackoverflow.com/questions/334822/…
  • 欢迎来到 Stack Overflow。您遇到了什么错误以及您期望的输出是什么?
  • 我认为您需要首先在逻辑上将您的问题分解为小步骤。然后,当您尝试逐个解决这些步骤时,您可能会提出更具体的问题,也许是一个特定的步骤。对于这个特定的问题,您可能已经在网上找到了解决方案。
  • @twisty 我只想通过 forEach 循环得到一个素数
  • @Gerard 不,亲爱的,我想使用 forEach 循环而不是 for 循环

标签: javascript php html jquery function


【解决方案1】:

对于这个级别的作业,这可能是一个过于高级的答案,但从技术上讲,它遵循规则(使用 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>

【讨论】:

    【解决方案2】:
    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));
    

    【讨论】:

    • 看我上面的问题
    【解决方案3】:

    我认为这是我应得的正确答案.. 它是代码爱好者,简短而激进

    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)}`));
    

    【讨论】:

      【解决方案4】:

      考虑以下示例。

      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: &lt;p id="show"&gt;&lt;/p&gt;

      【讨论】:

      • 请在本程序中使用 ForEach 循环,
      • @AbdullahRao 已更新。
      • 谢谢亲爱的,但 2 也是质数
      • 这只是显示奇数。不是素数。
      • 是的,它向我显示奇数这些不是素数
      猜你喜欢
      • 1970-01-01
      • 2017-04-26
      • 2013-01-02
      • 2011-09-23
      • 1970-01-01
      • 2015-08-14
      • 2014-12-09
      • 2022-12-13
      • 2011-08-19
      相关资源
      最近更新 更多