我在这里有此算法:
sumup(int n) {
int s = ???, k = 0;
while(k != n) {
k = s*(2*k-1)*(2*k-1);
s = k;
}
return s;
}
我需要找出它的目的是什么。它似乎甚至不适用于大多数数字,并且一旦完成,它还是会再次返回n
。
有人知道这个算法用于什么吗?
我以为它是平方根的,但实际上似乎都不行。
答案 0 :(得分:0)
在for循环结束时,s
和k
相等。在下一次迭代之前,请检查k != n
。这等效于s != n
。因此循环将一直运行到s == n
成立,然后返回n
为止。因此该函数获取输入n
,运行一段时间并最后返回n
。
问题是:
s
和n
配合在一起时。例如。如果0 < n < s
成立,算法将不会终止。k
用0
初始化,并在第一次迭代后成为s
的值。从那里基本上每次迭代都将其立方化。解决s^(3^x) = n
会导致Θ(log log n)
的复杂性。