【问题标题】:JS loop inside a loop循环内的 JS 循环
【发布时间】:2020-04-17 21:54:11
【问题描述】:

我的任务是编写一个仅使用循环的 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;
}

【问题讨论】:

  • 这能回答你的问题吗? Number prime test in JavaScript
  • 我需要输出一定范围内的所有素数,而不是检查特定数字是否为素数。
  • @Dimasub 但是你怎么知道一个数(即指定范围的一部分)是一个素数?

标签: javascript primes


【解决方案1】:

当您在嵌套的 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);
}

【讨论】:

  • 第一个解释问题所在的答案。谢谢!
【解决方案2】:

你可以试试这样的:

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

【讨论】:

    【解决方案3】:

    我需要输出一定范围内的所有素数,而不是检查 一个特定的数字,不管它是否是素数。

    你可以试试这个:

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

    【讨论】:

    • 当您投票决定将此问题作为重复问题结束时,为什么还要添加答案? o.O
    • @Andreas 因为我在答案中引用的评论。
    • 不管是不是骗子。投票结束或添加答案。
    • @Andreas 我写这个答案只是为了向 OP 提供如何做到这一点的信息。不是为了名誉之类的。也是因为OP不明白为什么会重复。
    • @Andreas 那么,我应该删除它吗?
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-22
        • 2014-06-18
        • 1970-01-01
        • 2016-04-24
        • 2021-09-14
        • 1970-01-01
        相关资源
        最近更新 更多