【问题标题】:Javascript code to find prime numbers doesn't work用于查找素数的 Javascript 代码不起作用
【发布时间】:2015-10-09 19:46:47
【问题描述】:

我运行这个函数,我用一个按钮触发了它,它应该打印素数。相反,它打印了它检查的所有数字。用户应该输入一个数字(例如 100),所有低于它的数字将被检查是否为素数,如果是,则将它们打印出来。(i 是正在检查的数字)

function findeprime(num) {
    for (i = 2; i < num; i++) {
        for (coun = 2; coun < i; coun++) {
            if (i % coun == 0) continue;
        }
        document.write(i + " is prime <br/>");
    }
}

我做错了什么???

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您的continue 只是打破了内部循环。我会推荐这样的东西

    function findeprime(num) {
        var isPrime;
        for (var i = 2; i < num; i++) {
            isPrime = true;
            for (coun = 2; coun < i; coun++) {
                if (i % coun == 0) isPrime = false;
            }
            if (isPrime) document.write(i + " is prime <br/>");
        }
    }
    

    【讨论】:

    • 为了更高效,您可以简单地检查输入数字的平方根;)
    • 哦,绝对的。我的意思是,即使是检查到i/2 的超天真方法也会在这里带来显着的收益。
    • 正如你所说,我的 continue 正在打破内部循环。但是由于正在检查的数字不是素数,我们想继续,并开始检查下一个数字。抱歉这些问题,我是 javascript 新手。
    • 对不起,我应该改写。它并没有脱离内部循环,它只是让它继续到coun 的下一个值。所以无论如何它仍然会检查2 . . . i 中的每个值,然后它会说i is prime,即使它可能已经持续了多次。通过添加标志,我们只有在从未找到 coun 这样的 i % coun == 0 值时才会到达该打印语句。
    【解决方案2】:

    您的 continue 语句似乎放错了位置。它会影响内部循环,而您的代码只有在影响外部循环时才能正常工作。

    由于您不能让 continue 语句影响外部循环/块,请尝试以下操作:

    function findeprime(num) {
        for (i = 2; i < num; i++) {
            var prime = true;
            for (coun = 2; coun < i; coun++) {
                if (i % coun == 0) {
                  prime = false;
                  break;
                }
            }
            if(prime) alert(i + " is prime");
        }
    }
    
    findeprime(14);

    【讨论】:

      【解决方案3】:

      正如已经指出的那样,您的 continue 将脚本从错误的循环中中断。你也可以label the loop你想突破:

      function findeprime(num) {
          checknum: for (i = 2; i < num; i++) {
              for (coun = 2; coun < i; coun++) {
                  if(i % coun == 0) continue checknum;
              }
              document.write(i + " is prime <br/>");
          }
      }
      findeprime(20);

      【讨论】:

        【解决方案4】:

        显然每个人都已经给了你答案,但是我将发布一个额外的例子,以供知识使用。

        Number.prototype.isPrime = function() {
        
          for (var i = 2; i < this; i++) {
            if (this % i == 0) {
              return false;
            }
          }
        
          return true;
        
        };
        
        function findPrimes(num) {
          var results = [];
          for (var i = 2; i <= num; i++) {
            if (i.isPrime()) results.push(i);
          }
          return results;
        }
        
        var primes = findPrimes(1000);
        
        document.write(primes.join(', '));

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多