循环中的 JS 循环

JS loop inside a loop

我有一个作业要编写一个 js 代码,只使用从用户接收数字并打印出 1 和该数字之间的所有素数的循环。

这就是我所做的,但它没有像我预期的那样工作,找不到我缺少的东西:

var num = parseInt(prompt('Please enter a number'));
var flag = 0;

for (var i=2 ; i<=num ; i++){
    for (var j=2 ; j<num ; j++){
        if (num%j==0){
            flag = 1;
            break;
        }       
    }
    if (flag==0) console.log(i);
    if (flag==1) flag=0;
}

您可以尝试这样的操作:

var n = parseInt(prompt('Please enter a number'));
for(var i = 2; i <= n; i++){
    var flag = false;
    for(var j=2; j<i; j++){
        if(i%j == 0){
            flag = true;
            break
        }
    }
    if(!flag)console.log(i);
}

当您处于嵌套 for 循环中时,您要确定 i 是否为质数,而不是 num。所以你想在那里使用 i 变量,像这样:

var num = parseInt(prompt('Please enter a number'));
var flag = 0;

for (var i=2 ; i<=num ; i++){
    for (var j=2 ; j<i ; j++){
        if (i%j==0){
            flag = 1;
            break;
        }       
    }
    if (flag==0) console.log(i);
    if (flag==1) flag=0;
}

我保留了您的其余代码,就像您拥有的那样,以便您尽可能了解正在发生的事情。


如果您喜欢简短的代码,这里有一个简短的版本:

var num = parseInt(prompt('Please enter a number'));
for(var i = 2, flag = 0; i <= num; i++, flag = 0){
  for(var j = 2; j < i; j++) flag = i % j == 0 ? 1 : flag;
  if(!flag) console.log(i);
}

I need to output all of the primes in a certain range, not checking for a specific number if its a prime or not.

你可以试试这个:

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

var num = parseInt(prompt('Please enter a number'));

for (var i = 2; i <= num; i++) {
  if (isPrime(i)) {
    console.log(i);
  }
}

让我们了解您在代码中做错了什么:

  1. 在内部循环中,您 运行 直到 num。为什么?你想要从 2 到 num 的所有数字都是质数,你如何检查数字 i 是否是质数?您尝试将 i 与从 2 到 i-1 的所有数字相除,这就是为什么内部循环应该从 j=2j<i.
  2. 在计算num % j == 0的内循环中,你只是问num是否是素数,而你应该问i是否是素数,因为i 介于 2num 之间,这是您要查找素数的范围。

var num = parseInt(prompt('Please enter a number'));
var flag = 0;

for (var i = 2; i <= num; i++) {
  for (var j = 2; j < i; j++) {
    if (i % j == 0) {
      flag = 1;
      break;
    }
  }
  if (flag == 0) console.log(i);
  if (flag == 1) flag = 0;
}

  var flag = false;
      var person = prompt("Please enter your name");
      console.log(person);
      for(var i = 2 ; i < person ; i++){
        for(var j = 2 ; j< i ; j++){
          if(i % j == 0){
            flag = true;
          }
        }
        if(flag == false){
          console.log(i , "is prome");
        }
        flag = false;
      }

试试这个代码。我会完美工作