我需要帮助理解这个解决方案以获得一个主要因素。这是代码 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的输出?
答案 0 :(得分:2)
这是发生了什么:
for
循环的要点是尝试2和当前值temp
之间的每个除数,其开始时等于原始数。
while
循环的要点是取这些除数中的每一个并尽可能多地尝试它们。只要剩余部分出现0
意味着它被均匀划分,那么每次继续划分并将temp
减少到除法的结果。
因此,while (temp % i === 0)
表示只要temp
均匀地除i
而没有余数,就会继续运行while循环。 %
模数运算符计算除法后的余数。
这是一个更具说明性的版本,当您运行它时会向您展示更多有关正在发生的事情:
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;
答案 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
。