有效地计算c ++

时间:2018-04-08 19:38:06

标签: c++

我需要找到斐波那契数的除数。

我试过这个,但效率不高:

int nrdiv(int val) {
    int n = 1;
    for (int i = 2; i <= val / 2; i++){
        if (val % i == 0){
            n++;
        }
    }
    return n+1;
}

例如,对于21号码,它应该返回4,对于124号码,它应该返回6.

我很想找到更好的方法来计算它们。感谢。

1 个答案:

答案 0 :(得分:-1)

为了澄清,你需要不同除数的数量还是只需要除数的数量?

快速简便的优化将迭代直到sqrt(n)而不是n / 2.

如果您正在使用这个不同版本,那么您可以使用此sudo代码实现递归函数:

nrdiv(N):
if N = 1 return 1

iterate with i from 1 to sqrt(N):

    if(i divides N) return 1+nrdiv(N/i)

return 1 

psudo代码的最后一行用于处理素数。

在效率方面这不是更好,但这更清洁 祝你好运!