素数子算法

设计一个算法来接收一个正数 n,并输出所有小于 n 且数字为 7 的素数。例如,如果 n 为 100,则程序应输出 7、17、37、47、67、71 、73、79 和 97。


程序冻结而不给出输出


function P6() {

  var n = parseInt(prompt("Please enter a value"));


  for (var i = 2; i <= n; i++) {

    if (prime(i) && has7(i)) {

      alert(i);

    }

  }

}


function prime(s) {

  var flag = true;

  var d = 2;

  while (flag == true && d <= s / 2) {

    if (s % d == 0) {

      flag = false;

    }

    d = d++;

  }

  return flag;

}


function has7(v) {

  var has7 = false;

  var length = Math.log(v) + 1;

  for (var i = 1; i <= length; i++) {

    var last = v % 10;

    if (last == 7) {

      has7 = true;

    }

    v = v % 10

  }

  return has7;

}


跃然一笑
浏览 242回答 1
1回答

慕尼黑的夜晚无繁华

这一行是错误的:d = d++;d++是一个后增量,它增加变量但计算为旧值。因此,当您将结果分配回变量时,它会将其设置回原始值。结果,您有一个无限循环。它应该是:d = d + 1;要不就:d++;另一个错误是:v = v % 10;这应该除以v10,但它只是设置v为最后一个数字。它应该是:v = Math.floor(v / 10);在下面的代码中,我简化了所有循环。它们不是设置变量并继续循环,而是在循环确定答案后立即返回。如果循环结束而不返回,则它们返回相反的值。function P6() {&nbsp; var n = parseInt(prompt("Please enter a value"));&nbsp; for (var i = 2; i <= n; i++) {&nbsp; &nbsp; if (prime(i) && has7(i)) {&nbsp; &nbsp; &nbsp; console.log(i);&nbsp; &nbsp; }&nbsp; }}function prime(s) {&nbsp; for (var d = 2; d <= s / 2; d++) {&nbsp; &nbsp; if (s % d == 0) {&nbsp; &nbsp; &nbsp; return false;&nbsp; &nbsp; }&nbsp; }&nbsp; return true;}function has7(v) {&nbsp; while (v != 0) {&nbsp; &nbsp; var last = v % 10;&nbsp; &nbsp; if (last == 7) {&nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; }&nbsp; &nbsp; v = Math.floor(v / 10);&nbsp; }&nbsp; return false;}P6();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript