首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环,其中计数器上升到由Math.floor()生成的值。

循环,其中计数器上升到由Math.floor()生成的值。
EN

Stack Overflow用户
提问于 2022-04-19 17:19:51
回答 1查看 93关注 0票数 2

我是一个新的网页开发人员,学习网页开发大约8-9个月。我最近在我毕业的训练营里成为了新生的导师,我想写一个简单的程序来计算所有素数,直到给定的上限。我用C、C++和Python解决了同样的问题。我使用的是“天真”的实现,而不是埃拉托斯提尼的筛子。

这是工作的代码:

代码语言:javascript
运行
复制
"use strict";

function primeNumbers() {
  let highNumber;

  highNumber = window.prompt("Calculate all prime numbers up to:");

  for (let i = 2; i <= highNumber; i++) {
    let numberOfDivisors = 0;

    for (let j = 2; j < highNumber; j++) {
      if (i % j == 0) numberOfDivisors += 1;
    }
    if (numberOfDivisors == 1) console.log(i);
  }
}

当然,j不一定要一直到highNumber,和任何数字一样,所有可能的除数都不到这个数字的一半。因此,我更改了内部for循环,使j只上升到Math.round(highNumber /2+ 1):

代码语言:javascript
运行
复制
"use strict";

function primeNumbers() {
  let highNumber;

  highNumber = window.prompt("Calculate all prime numbers up to:");

  for (let i = 2; i <= highNumber; i++) {
    let numberOfDivisors = 0;

    for (let j = 2; j < Math.round(highNumber / 2 + 1); j++) {
      if (i % j == 0) numberOfDivisors += 1;
    }
    if (numberOfDivisors == 1) console.log(i);
  }
}

但这在某种程度上破坏了代码并导致了意想不到的结果。我知道在JavaScript中所有的数字在技术上都是浮点数,但是我认为使用Math.floor()可以帮助我处理这个问题。

对于为什么这不起作用,有什么想法可以做吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-19 18:25:36

一个数字总是有两个除数,1和数字本身。j != i将确保不发生不必要的计算。我在声明中将numberOfDivisors初始化为2。当我们迭代时,我们检查numberOfDivisors是否进一步增加。如果是这样的话,那不是素数。

代码语言:javascript
运行
复制
"use strict";

function primeNumbers() {
  let highNumber;

  highNumber = window.prompt("Calculate all prime numbers up to:");

  for (let i = 2; i <= highNumber; i++) {
    let numberOfDivisors = 2;
    for (let j = 2; j < Math.round(highNumber / 2 + 1), j != i; j++) {

      if (i % j == 0) numberOfDivisors += 1;
    }
    if (numberOfDivisors == 2) console.log(i);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71928883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档