一切!最近,我一直试图使用lucas lehmer测试方法构建一个mercende素数生成器/生成器。代码适用于前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");
}
}
答案 0 :(得分:0)
Javascript编号的尾数(或有效数字)为53位宽。因此,可以以完全精度存储的最大整数是:
2^53 - 1 = 9007199254740991 = Number.MAX_SAFE_INTEGER
(您可能需要阅读this page了解更多详情。)
您的算法可能会很快达到此限制。精度爆炸发生在这个声明中:
lucasNum = (Math.pow(lucasNum, 2)-2);
包含在循环中。