为什么在分解循环中除以相同的因子?

问题描述 投票:0回答:3
function Factors(remainder) {
    var factors = [], i;

    for (i = 2; i <= remainder; i++) {
        while ((remainder % i) === 0) {
            factors.push(i);
            remainder /= i;
        }
    }

    return factors;
}

我们可以只使用“if”代替“while”吗?

function Factors(remainder) {
    var factors = [], i;

    for (i = 2; i <= remainder; i++) {
        if(remainder%i===0) {
            factors.push(i);
            remainder /= i;
        }
    }

    return factors;
}
javascript math factors
3个回答
1
投票

此片段演示了使用

while
和使用
if

之间的区别

function FactorsWhile(remainder) {
    var factors = [], i;

    for (i = 2; i <= remainder; i++) {
        while ((remainder % i) === 0) {
            factors.push(i);
            remainder /= i;
        }
    }

    return factors;
}

function FactorsIf(remainder) {
    var factors = [], i;

    for (i = 2; i <= remainder; i++) {
        if ((remainder % i) === 0) {
            factors.push(i);
            remainder /= i;
        }
    }

    return factors;
}

console.log("Using WHILE: " + JSON.stringify(FactorsWhile(4)));
console.log("Using IF: " + JSON.stringify(FactorsIf(4)));


0
投票

原因是因为您使用

while
的功能正在寻找素因数。同时,具有
if
的函数只能找到少数可能是也可能不是素数的因子。我们使用数字 12。如果使用
while
运行该函数,结果数组应该是 [2,2,3],同时,使用
if
语句,您将得到 [2,3]。第一个答案是正确的,因为 2 x 2 x 3 = 12 并且数组中的每个数字都是素数,同时 2 x 3 = 6。


0
投票

if
语句只会检查此时余数是否能被
i
整除。

while
循环将继续将余数除以
i
,只要余数
% i === 0
(即,
remainder
可被
i
整除)。它确保捕获
i
的所有因素。

© www.soinside.com 2019 - 2024. All rights reserved.