while循环上的模数如何执行?

时间:2016-07-16 19:19:31

标签: javascript

我需要帮助理解这个解决方案以获得一个主要因素。这是代码 demo

function getMaxPrimeFactor (n) {
    var temp = n;
    for(var i = 2; i < temp; i++) {
        while (temp % i === 0) {
            temp /= i;
        }
    }   
    console.log(temp);
}

getMaxPrimeFactor(13195);

我理解for循环,但我不知道while循环和分区的内容是什么,它是如何得到29的输出?

2 个答案:

答案 0 :(得分:2)

这是发生了什么:

for循环的要点是尝试2和当前值temp之间的每个除数,其开始时等于原始数。

while循环的要点是取这些除数中的每一个并尽可能多地尝试它们。只要剩余部分出现0意味着它被均匀划分,那么每次继续划分并将temp减少到除法的结果。

因此,while (temp % i === 0)表示只要temp均匀地除i而没有余数,就会继续运行while循环。 %模数运算符计算除法后的余数。

这是一个更具说明性的版本,当您运行它时会向您展示更多有关正在发生的事情:

&#13;
&#13;
function getMaxPrimeFactor (n) {
    var temp = n;
    for(var i = 2; i < temp; i++) {
        while (temp % i === 0) {
            temp /= i;
            console.log("factor=",i,", ",temp*i,"/",i, "=",temp);
        }
    }   
    console.log("remaining factor=",temp);
}

getMaxPrimeFactor(13195);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

此处while正在检查temp % i的值是否为0(即,temp是否可以i整除)。如果此条件为true,则会将temp / i存储在temp

所以当while条件为真时

i   temp   (temp % i)  new_temp_value(temp/i)
5   13195  0           2639
7   2639   0           377
13  377    0           29
29  29     -           - //for loop stops here since `i < temp` condition doesn't satisfy.

上一个临时值为29

因此,如果我们仅考虑上面的i值,我们会得到5, 7, 13, 29因子13195

即。 5 * 7 * 13 * 29 = 13195

因此,因子的最大值为29