为什么这个素数因素不起作用?

时间:2016-09-07 21:44:26

标签: javascript

function prime(number) {
    var primeNumbers = [];
    var numberDivide = 2;
    for(var i=0; i<number; i++) {
        var nice = number/numberDivide;
        if(Math.floor(nice) == nice) {
            number = nice;
            primeNumbers.push(numberDivide);
        } else {
            numberDivide++
        }
        console.log(primeNumbers)
    }
}

这是我的代码。它没有记录最终的素数,我不知道为什么。我经过并大声说出来但它没有工作......

1 个答案:

答案 0 :(得分:0)

首先使用整数进行代码转换,以查看函数正在执行的操作:

function prime(number) {
    var primeNumbers = [];

    for(var divisor =2; divisor <= number;){
        if( number % divisor == 0){
            primeNumbers.push(divisor);
            number = number/divisor;
            continue;
        }
        ++divisor;
     }
    return primeNumbers;
}

console.log(    prime(18));  // returns [2,3,3]

此处number被除以一个素数因子的商所取代,以查看是否可以找到超过已经确定的其他素数因子。请注意number不断变小,dividend在被发现是一个因素时不会增加,因此下一个循环可以测试它是否是一个多重因素。

那么循环迭代了多少次?这个版本没有对它们进行计数,但是当循环计数器(未另行使用)大于或等于{时,发布的版本停止迭代所讨论的{1}}越来越小。

number的发布函数失败,返回[2,3]而不是[2,3,3]。如果允许再次迭代则产生正确的结果。我没有考虑预先计算循环次数,但是找到何时在发布的代码中退出循环的方法是导致问题的原因。