Javascript 用比这更简单的代码计算从2到100的素数

Javascript 用比这更简单的代码计算从2到100的素数,javascript,primes,Javascript,Primes,它必须只有函数、变量、循环等(基本的东西)。我很难从目前所学的(应该能够做到的)基础上从头开始编写代码。让我很生气:/如果您能一步一步地告诉我,以确保我理解,我真的非常感激。非常感谢advanced的帮助 如何使用比此代码更简单的代码获得相同的结果: var primes=4; for (var counter = 2; counter <= 100; counter = counter + 1) { var isPrime = 0; if(isPrime === 0){

它必须只有函数、变量、循环等(基本的东西)。我很难从目前所学的(应该能够做到的)基础上从头开始编写代码。让我很生气:/如果您能一步一步地告诉我,以确保我理解,我真的非常感激。非常感谢advanced的帮助

如何使用比此代码更简单的代码获得相同的结果:

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");
var素数=4;

对于(var counter=2;counter我今天感觉很淘气,所以:

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");
}
函数printprimes介于two和onehundresimple()之间{ var素数=[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], 我 arrayLength=素数长度; 对于(i=0;i
这将查找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");
var素数=0;
var isprime=真;

对于(var counter=2;counter首先,您真的不需要为此使用
==
。标准的
==
就足够了。其次,您可以将所有相同的行,除了一个数字之外,做成一行:

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");
接下来,我们可以对值进行否定检查(
!=
而不是
=
),并将您的
else if
与您的
else
组合。由于我们正在进行否定检查(对于这种情况),我们必须将
s(
|
)切换到
s(
&
):

var素数=4;
对于(var counter=2;counter当然没有定义“simpler”:-)

下面的代码可以缩短很多,但是有一点健壮性

// 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
} 
//获取从0到n的素数。
//n必须小于2^53
功能(n){
n=数量(n);
如果(n>Math.pow(2,53)| | isNaN(n)| | n<1){
回来
}
var素数=[];
var notPrimes={};
var-num;

对于(var i=2;i这将更简单地回答您的问题

 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);}
for(int i=2;i<100;i++){
int j=0;
对于(j=2;j
这非常简单(我的意思是,简短):

console.log(2);console.log(3);
变量m5=25,m7=49,i=5,d=2,c=2;

对于(;iRelate:我首先要试着理解代码。它很简单。你可能会把simple弄得很短。我不知道为什么“if(isPrime==0)”正好在赋值“isPrime=0”之后.那是“如果”useless@sachleen是的,真的很抱歉我想说的更短。@RufioLJ,你发布的代码会展开一个内部循环以提高速度。这是一种使代码性能更好的常见策略。素数计算器非常占用CPU。你接受的答案写得很差,需要花费很长时间才能找到如果你给它一个高的素数界,比如1000000(提示:内部循环将执行当前编写的1万亿次).我添加了一条评论,说明他如何改进1000000个素数只需要10亿次迭代,但这仍然是一个很大的问题。回答很糟糕,但让我笑了一下…+1我可能误解了这个问题,但你的回答给出了值的素数@Mike是的,但如果你看上面的代码,这也是它所做的…这里有最简单的答案!我一直在找这个…非常感谢我现在要试着理解它…为什么你需要将iPrime设置为true?(我知道在我发布的代码中我也没有得到它)假设它是prime,然后进行测试,看看它是否不是。我想说,这段代码比原始代码效率要低得多。是的,这个用户完全理解我想要的!这是我到目前为止学到的所有内容。有什么突破;为什么?他为什么要将“mod”与“counter”进行比较?确保它不能被任何小于它的数整除这是一个非常好的答案!感谢大家一步一步地指导我。我希望我能选择两个最好的答案。你是对的,
==
可以工作,但是
===
没有什么问题,而且这通常是一个很好的做法。-1个格式不好的代码。尽管它不是必需的红色,无论如何,使用大括号是个好习惯。问题是标记为javascript,而不是java。
// 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
}
 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);}
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