0

我正在编写一个小脚本来查找并打印出从 X 到 Y 的所有素数。这是我所写的:

var numX = prompt('Enter a number greater than 0:','');
var numY = prompt('Enter a number greater than ' + numX + ':','');

while (numX <= numY) {
    if (numX == 1 || numX == 2 || numX == 3) {
    document.write(numX + '</br>');
    } else if (numX % 2 === 0 || numX % 3 === 0 || numX % 5 === 0 || numX % 7 === 0){
    document.write();
    } else {
    document.write(numX + '</br>');
    }
    numX++;
};

现在,只要第一个数字是 1,它就可以正常工作。但是,如果第一个数字大于 1,它不会打印任何内容。我不确定这是否是这个问题的正确论坛(也许是数学论坛?),但我想如果有人可以帮助我,我会在这里问。我也知道筛子是解决这个问题的更好方法,但我想先尝试将其作为一个 while 循环来解决。任何和所有的帮助表示赞赏!

4

4 回答 4

3

虽然我了解您要做什么,但我强烈建议您看一下埃拉托色尼筛。如果您决定处理非常大的数字,您真的想掌握了解不同算法来计算这些东西的窍门。虽然你现在的方式可能在较小的范围内工作,但更大的范围会变得疯狂。

我也相信这个 Stackoverflow 问题与这个问题非常相似,并且它的答案非常好:

求250以下的素数之和

于 2012-11-30T07:15:39.743 回答
0

您可以在这里尝试任何选项:http ://www.javascripter.net/faq/numberisprime.htm

于 2012-11-30T07:12:49.957 回答
0

嗨,我已经为您的代码添加了一些更改(添加了 5 和 7 素数的条件)及其工作...

var numX = prompt('Enter a number greater than 0:','');
var numY = prompt('Enter a number greater than ' + numX + ':','');

while (numX <= numY) {
    if (numX == 1 || numX == 2 || numX == 3 || numX == 5 || numX == 7) {
    document.write(numX + '</br>');
    } else if (numX % 2 === 0 || numX % 3 === 0 || numX % 5 === 0 || numX % 7 === 0){
    document.write();
    } else {
    document.write(numX + '</br>');
    }
    numX++;
};

在这里查看演示

于 2012-11-30T07:15:26.210 回答
0

好的,事实证明我在问这个问题时是过激的。我更关心的是让 else if 语句起作用,我什至没有注意到我的公式存在严重缺陷!

问题可能与第二个变量有关。如果第一个变量是 1,那么第二个变量可以是任意数字。但是,如果第一个变量大于 1,那么第二个变量必须小于 100,否则它将不起作用。

于 2012-11-30T07:37:04.753 回答