所有!最近,我一直在尝试使用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);
包含在循环中。