我用 JavaScript 编写了代码来查找素数。
我创建了一个数组 (var arr
) 并将第一个素数放入其中。
我想检查数组中存储的最后一个素数的 i
值(而不是所有数字以加快运行速度。)
检查我的代码并请更正我的语法。
var arr = [2];
document.getElementById("demo").innerHTML = arr;
function myFunction() {
for (i = 3; i <= 10; i++) {
if (i % 2 !==0) {
for (j = 0; j <= arr.length - 1; j++){
if (i % arr[j] !== 0) {
arr.push(i);
}
}
document.getElementById("demo").innerHTML = arr;
}
}
最佳答案
OP 建议的算法可能有问题,即使它适用于 2 到 10 的有限数字范围,在纠正后会产生 2,3,5,7
的预期结果代码。不幸的是,如果数字范围扩大,那么
非质数可能会悄悄出现,如下所示:
var arr = [2];
function myFunction() {
for (i = 3; i <= 30; i++) {
if (i % 2 !==0 && i % Math.sqrt(i) !==0) {
for (j = 0; j <= arr.length - 1; j++){
if (i % arr[j] !== 0) {
arr.push(i);
}
break;
}
}
}
document.getElementById("demo").innerHTML = arr;
}
myFunction();
<div id="demo"></div>
下面的代码可能效率较低,但好处是无论数字范围有多大,它都可以工作。该解决方案源自 here 借用和修改的代码和 here .
var arr = [2];
function isPrime( n ) {
// eliminate non-integers
if ( n != Math.round(n) ) {
return false;
}
// assume n is prime and test if true
for(var i=2, max=Math.sqrt(n); i <= max; i++) {
if ( n % i === 0 ) {
return false;
}
}
return n > 1;
}
function myFunction() {
for (i = 3; i <= 30; i++) {
if ( isPrime(i) ) {
arr.push(i);
}// end-if
}// end-for
document.getElementById("demo").innerHTML = arr;
}
myFunction();
<div id="demo"></div>
请注意,数组最初以素数 2 开始,当代码遇到指定范围内的素数时,它们将被添加到数组中。顺便说一句,您需要一个 id 为“demo”的 HTML DIV 标记才能正常工作。并且,您只需在循环完成处理后将数组分配给 div 元素的innerHTML 属性一次。最后,您需要调用 myFunction()。
有趣的相关讨论here .
关于javascript - JavaScript 中的素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46535186/