Javascript “解决问题的有效方法”;CountFactors“;可变性问题

Javascript “解决问题的有效方法”;CountFactors“;可变性问题,javascript,Javascript,我一直在讨论可编码性问题,其中一个问题是计算一个数字的所有可能因素。我把整个数字循环了一遍,得到了答案,但当然效率不高 我寻找答案,得到了这个 function solution(N) { var i; var NumFactors = 0; for(i = 1;i*i < N; i++) { if(N%i == 0) NumFactors += 2; } if(i*i == N) NumFactors++; return

我一直在讨论可编码性问题,其中一个问题是计算一个数字的所有可能因素。我把整个数字循环了一遍,得到了答案,但当然效率不高

我寻找答案,得到了这个

function solution(N) {
  var i;
    var NumFactors = 0;

    for(i = 1;i*i < N; i++) {
        if(N%i == 0) NumFactors += 2;
    }

    if(i*i == N) NumFactors++;

    return NumFactors
}
函数解决方案(N){
var i;
var NumFactors=0;
对于(i=1;i*i
如果您运行
解决方案(24)
而没有尝试过挑战,则应返回8作为因子数,即(1、2、3、4、6、8、12、24)


既然编写代码的人没有留下任何解释,那么了解情况的人可以向我解释一下
i*i
以及将NumFactors增加2的原因。

i*i
用于检查平方根(N)。因为如果一个数N有一个除数,那么实际上有两个除数。因为除法的结果是另一个除数。例如,在24的情况下

如果你取除数2,你会发现另一个除数是12。因为
2x12=24
。如果你循环N,即1到24,你会得到像这样的除数

2 X 12 = 24
3 X 8 = 24
4 X 6 = 24
6 X 4 = 24
8 X 3 = 24
12 X 2 = 24
24 X 1 = 24
你看,在平方根(N)之后有多余的值。这就是为什么对于优化,我们从1到平方根(N)


上面已经描述了关于增加系数2的问题。对于特殊情况,当N是一个完美的平方数,如36或49时,您将面临
6 X 6=36
7 X 7=49
的情况,这就是为什么在这种情况下,我们将因子增加1。因为在我们的例子中实际上有一个on除数,即
6
7

i*i用于检查平方根(N)。因为如果一个数N有一个除数,那么实际上有两个除数。因为除法的结果是另一个除数。例如,在24的情况下

如果你取除数2,你会发现另一个除数是12。因为
2x12=24
。如果你循环N,即1到24,你会得到像这样的除数

2 X 12 = 24
3 X 8 = 24
4 X 6 = 24
6 X 4 = 24
8 X 3 = 24
12 X 2 = 24
24 X 1 = 24
你看,在平方根(N)之后有多余的值。这就是为什么对于优化,我们从1到平方根(N)

上面已经描述了关于增加系数2的问题。对于特殊情况,当N是一个完美的平方数,如36或49时,您将面临
6 X 6=36
7 X 7=49
的情况,这就是为什么在这种情况下,我们将因子增加1。因为在我们的例子中,实际上有一个除数,即
6
7