所有!最近,我一直在尝试使用lucas lehmer测试方法来建立一个质数素数生成器/生成器。该代码适用于前4个数字,其余部分则失败。有什么建议?谢谢!

var totalPrimes = Math.floor(prompt("What would you like the upper limit of
                                     our search for primes to be?"));
for (var i = 2; i < totalPrimes; i++) {
    var lucasNum = 4;
    var curNumber = (Math.pow(2, (i+1))-1);
    for (var x = 0; i-1 > x; x++) {
        if (lucasNum / curNumber > 1) {
            lucasNum = (Math.pow(lucasNum, 2)-2);
        } else {
            lucasNum = (Math.pow(lucasNum, 2)-2);
        }
    }
    if (lucasNum % curNumber === 0) {
        console.log("The number " + curNumber + " is prime");
    } else {
        console.log("The number " + curNumber + " is not prime");
    }
}

最佳答案

Javascript数字的尾数(或有效数字)为53位宽。因此,可以全精度存储的最大整数是:

2^53 - 1 = 9007199254740991 = Number.MAX_SAFE_INTEGER


(您可能想阅读this page以获得更多详细信息。)

您的算法很可能很快达到此限制。此语句中发生精度爆炸:

lucasNum = (Math.pow(lucasNum, 2)-2);


包含在循环中。

07-24 22:32