【问题标题】:Finding Prime Numbers with Javascript使用 Javascript 查找素数
【发布时间】:2016-08-26 12:06:58
【问题描述】:

我正在尝试编写一个显示从 0 到 100 的素数的脚本,但是当我执行它时,浏览器崩溃了。 JSHint 没有检测到任何错误。

我想了解为什么此代码不起作用:我对找到完成相同任务的完全不同的代码 (like this one) 不感兴趣。

这是我编写的第一个代码,所以我提前为我忽略的所有愚蠢错误道歉。

var i;
var m;
var primeArr = [2, 3, 5, 7, 11, 13, 17, 19];
var theMaxNumber = 100;
var theMinNumber = 21;
var theCounter = -1;

function myFunction() {
        for (i = theMinNumber; i < theMaxNumber; i += 2) {
            for (m = 0; m < primeArr.length; m++) {
                if (i % primeArr[m] !== 0) {
                    theCounter++;
                    if (theCounter === primeArr.length) {
                        primeArr.push(i);
                    } 
                    if (m === primeArr.length) {
                        theCounter = -1;
                    }
                } 
            } 
        } 
       console.log( primeArr.toString());
    }  

理论上应该是这样工作的:

1) 该函数确定数 i 是否可被比自身小的素数整除。

2) 如果是,theCounter 被重置,i 增加 2。

3) 如果不是,theCounter 加一。如果在循环结束时,i 不能被所有小于自身的素数整除,则表示它是素数:i 被压入数组(因为 theCounter = == primeArr.length),那么 i 加二。

编辑:我修复了代码中的所有错误,现在可以完美运行:

var i;
var m;
var primeArr = [3, 5, 7, 11, 13, 17, 19];
var theMaxNumber = 100;
var theMinNumber = 21;
var theCounter = 0;

function myFunction() {
    for (i = theMinNumber; i < theMaxNumber; i += 2) {
        theCounter = 0;
        for (m = 0; m < primeArr.length; m++) {
            if (i % primeArr[m] !== 0) {
                theCounter++;
            }
            if (theCounter === primeArr.length) {
                primeArr.push(i);
            }
        }
    }
    primeArr.unshift(2);
   console.log( primeArr.toString());
}

【问题讨论】:

  • 在纸上播放。只有当i % primeArr[m] == 0 有意义时才做某事,因为那时你已经找到了一个因素。 JavaScript 是快速和良好学习的不幸选择。也许主流java会做。 (自以为是)
  • 您为素数定义的数组已经只包含素数。你想在这里找到什么?在这行代码中 if (i % > primeArr[m] !== 0) { w++; --> 试图增加一个没有在任何地方声明的变量。
  • 我不小心写了 w 而不是 theCounter,谢谢你的评论。我编写了那行代码,以便为列表中的每个素数划分 i。如果 i 对它们中的任何一个都不可整除(模数不为 0),则意味着它也是一个素数并且它已添加到列表中。在第一个“for 循环”中,从 21 到 100 的所有素数都应该被添加到 primeArr

标签: primes


【解决方案1】:

您的停止条件在内部 for 循环中是错误的,它有一个无限循环不断增加 primeArr 直到它使 JS 引擎崩溃。 添加“警报”或“调试器”命令以查看问题

        for (m = 0; m < primeArr.length; m++) {
            if (i % primeArr[m] !== 0) {
                theCounter++;
                if (theCounter === primeArr.length) {
                    primeArr.push(i);
                } 

【讨论】:

  • 哇,我没想到!即使只是添加一个“break;”不会使代码工作,至少现在很清楚为什么它崩溃了!只要我的声望达到 15 或更多,我就会投票(现在我不能)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 2011-08-01
  • 2011-10-23
相关资源
最近更新 更多