我需要找到斐波那契数的除数。
我试过这个,但效率不高:
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.
我很想找到更好的方法来计算它们。感谢。
答案 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代码的最后一行用于处理素数。
在效率方面这不是更好,但这更清洁 祝你好运!