javascript - 精度和大数

标签 javascript node.js precision

我用 JavaScript 编写了一个函数来计算素数:

function isDivisible(dividend, divisor) {
    return dividend % divisor === 0;
}

function isPrime(n) {
    var factor = 2;

    n = Math.abs(n);

    if (n <= 1) {
        return true;
    }

    while (factor < n) {
        if (isDivisible(n, factor)) {
            return false;
        }

        factor += 1;
    }

    return true;
}
function getPrimes(max) {
    var primes = [], i = 1;

    while (i <= max) {
        if (isPrime(i)) {
            primes.push(i);
        }

        i += 1;
    }

    return primes;
}

function M(p) {
    return Math.pow(2, p) - 1;
}

function isMersennePrime(p) {
    var s, m, i;

    s = 4;
    m = M(p);

    for (i = 0; i < p - 2; i++) {
        s = (s * s - 2) % m;
    }

    return s === 0 ? true : false;
}

function findLargestMersennePrime(pMax) {
    var p, primes = getPrimes(pMax);

    while (primes.length) {
        p = primes.pop();

        if (isMersennePrime(p)) {
            return M(p);
        }
    }

    return null;
}

函数 findLargestMersennePrime 接受参数 p,它用作计算梅森素数 M(p) 的种子值。该程序使用 Lucas Lehmer Primality test .

我使用的测试用例对应于this table .对于任何给定的输入 pMax,程序会获取小于或等于 pMax 的素数列表,然后检查 p 的梅森数是否为素数。测试用例通过了前 7 个梅森素数,即 p < 31。

当 p = 31, 61, 89... 时,M(p) 为素数,但函数 isMersennePrime(31) 始终返回 false。

我认为这可能与 JavaScript 中数字的最大大小有关。我正在运行 Node 0.5。这是我的代码中的错误还是 JavaScript 的限制?是否有另一种语言更适合解决此问题或使其在 JS 中工作的方法?

最佳答案

Javascript 数字是标准的 double precision floating numbers并且可以达到 252 - 1。这对于您的第 8 个梅森素数应该足够了(但对于第 9 个梅森素数来说不够精确)

关于javascript - 精度和大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942282/

相关文章:

javascript - 链式链接返回对象 Javascript

c++ - C++ 中 float、double 或 long double 的精度是什么意思?

sql - MS Access 舍入精度与 Group By

c++ - 数值错误是否可重现?

javascript - 如何让来自ajax的数据成为Highchart中的X轴?

javascript - Axios 不作为 post 方法发送

javascript - 在订阅响应中初始化的 Angular 4 类型 Item 的组件变量没有在 Item 类中定义的方法

javascript - FIREBASE admin sdk 不返回 promise ? Node JS

javascript - 无法在nodejs中为URL.createObjectURL添加polyfill

node.js - Google Cloud Functions 包括私有(private)图书馆