使用Javascript

时间:2016-08-26 12:06:58

标签: primes

我正在尝试编写一个显示从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 增加1。如果,在循环结束时, i 对于所有小于其自身的素数都不是可分数的,这意味着它是素数: i 被推入数组中(因为 theCounter = == primeArr.length),然后 i 增加2。

编辑:我修复了代码中的所有错误,现在效果很好:

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());
}

1 个答案:

答案 0 :(得分:0)

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

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