为了账号安全,请及时绑定邮箱和手机立即绑定

素数子算法

素数子算法

跃然一笑 2022-01-13 17:36:50
设计一个算法来接收一个正数 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;}
查看完整描述

1 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

这一行是错误的:


d = d++;

d++是一个后增量,它增加变量但计算为旧值。因此,当您将结果分配回变量时,它会将其设置回原始值。结果,您有一个无限循环。


它应该是:


d = d + 1;

要不就:


d++;

另一个错误是:


v = v % 10;

这应该除以v10,但它只是设置v为最后一个数字。它应该是:


v = Math.floor(v / 10);

在下面的代码中,我简化了所有循环。它们不是设置变量并继续循环,而是在循环确定答案后立即返回。如果循环结束而不返回,则它们返回相反的值。


function P6() {

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


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

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

      console.log(i);

    }

  }

}


function prime(s) {

  for (var d = 2; d <= s / 2; d++) {

    if (s % d == 0) {

      return false;

    }

  }

  return true;

}


function has7(v) {

  while (v != 0) {

    var last = v % 10;

    if (last == 7) {

      return true;

    }

    v = Math.floor(v / 10);

  }

  return false;

}


P6();


查看完整回答
反对 回复 2022-01-13
  • 1 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号