使用JavaScript检查素数

时间:2014-02-21 03:19:33

标签: javascript

我现在正在做第三个项目的问题。到目前为止,我已经找到了解决问题的方法,即找到600851475143的最大素数因子。

我写了一小段代码,可以将数字的所有素因子放入数组中。我遇到的问题是数字可能太大而无法计算。我已经使用了其他大数字(不像这个那么大)并且它们工作正常但是这个只是冻结了页面,就像它在无限循环中一样。这是代码:

var primes = [];
function factor (largestNumber) {
    var a = largestNumber;
    var b = 2; 
    while (b < largestNumber) {
        if (a % b == 0) {
            a /= b;
            primes.push(b);
            b = 2;

        } else {
            b++;
        }
    }
}

factor(600851475143);
console.log(primes);

2 个答案:

答案 0 :(得分:2)

您的算法不是最佳的。

function factor(largestNumber) {
    var primes = [];                          // using local value
    var a = largestNumber;
    var b = 2;
    while (b <= Math.floor(Math.sqrt(a))) {   // we do not need to check whole number
                                              // over and over again.
                                              // We could check to a only 
                                              // or even to sqrt(a) only
        if (a % b == 0) {
            a /= b;
            primes.push(b);
                                             // there is no reason to reset value
        } else {
            b++;
        }
    }
    primes.push(a);                          // rest number would be always prime
    return primes;
}

console.log(factor(600851475143));

答案 1 :(得分:0)

这可能是一种有用的方法,将最大的主要因素分成3部分。

  1. 将最大的Num切成2个关闭数,例如40 =&gt; 5 * 8

  2. 获取更大的num(8)并找出所有小数量的小数。存储到阵列。

  3. 使用循环获取最大的素数因子。

  4. 就是这样,我今晚会试试。如果我这样做,我将添加jsfiddle addr。 :)