【问题标题】:Getting an incorrect answer with a mercende prime number generator使用 mercende 素数生成器得到不正确的答案
【发布时间】:2016-08-16 19:33:59
【问题描述】:

全部!最近我一直在尝试使用 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");
    }
}

【问题讨论】:

  • 你试图实现什么代码?我还没有找到与该算法相似的 Lucas Lehmer 算法。
  • 我正在尝试编写自己的代码,作为尝试的起始问题。谢谢!
  • 首先创建一个经过验证的工作算法。这不是一个数学网站。

标签: javascript primes


【解决方案1】:

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

2^53 - 1 = 9007199254740991 = Number.MAX_SAFE_INTEGER

(您可能需要阅读this page 了解更多详情。)

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

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

包含在循环中。

【讨论】:

  • 谢谢!很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-17
  • 2020-01-06
  • 2018-12-08
相关资源
最近更新 更多