0

我需要创建一个包含前 100 个素数的数组,这是我的代码:

var premier= [];
var nombre= premier.length;

function isPrime(n)
{
    if(n < 2)
    {
        return false;
    }

    for(i=2; i<Math.sqrt(n); i++)
    {
        if(n%i===0)
        {
            return false;
        }
    }
    return true
};

while(nombre<100)
{
    var j=2
    if(isPrime(j)==true)
    {
        premier.push(j);
    }
    j=j+1
}

我是 Javascript 的初学者,但我已经测试了这个isPrime函数,即使对于大数字它也能正常工作。

但是当我运行程序时,我有:

致命错误:JS 分配失败 - 进程内存不足

我认为这部分是错误的:

while(nombre<100)
{
    var j=2
    if(isPrime(j)=true)
    {
        premier.push(j);
    }
    j=j+1
}
console.log(premier)

但我不知道为什么

4

1 回答 1

3

j=2每次循环运行时您都在重复设置,并且您永远不会更改nombre,因此循环永远不会结束。请注意,JavaScript 通过值设置文字值,而不是通过引用,因此nombre = premier.length不会神奇地更新。

此外,表单的语句if( x = true)设置 x为 true,然后自动传递条件。在这种情况下,因为x是一个函数调用,所以它是无效的语法。

你是这个意思吗?

var j = 2;
while(premier.length < 100) {
    if( isPrime(j)) premier.push(j);
    j++;
}
于 2013-06-23T19:21:17.103 回答