c - 在 O(logn) 时间内求出从 k= 0 到 n 的 x^k 的总和

标签 c algorithm big-o

所以我的问题是如何更具体地在 C 中执行此操作。我知道 O(logn) 通常意味着我们将通过以某种方式拆分其中一个参数来使用递归。

我要实现的是 xn 的 k = 0 到 n 的总和。 例如 exponent_sum(x, n) 将是这种情况下的参数。

然后,

exponent_sum(4, 4) 将是 40 + 41 + 42 + 4< sup>3 + 44 = 341.

我不确定从哪里开始。一些提示将不胜感激。

最佳答案

查看总和的一种方法是将其视为以 x 为底且全为 1 的数字。

例如,44 + 43 + 42 + 41 + 4 0 在基数 4 中是 11111。

在任何基数中,一串 1 将等于 1 后跟一串相同数量的 0 减 1,除以基数减 1。

例如:

  • 以 10 为基数:(1000 - 1)/9 = 999/9 = 111
  • 以 16 为基数:(0x10000 - 1)/0xF = 0xFFFF/0xF = 0x1111
  • 以 8 为基数:(0100 - 1)/7 = 077/7 = 011

等等

所以把这些放在一起,我们就可以概括

exponent_sum(x, n) = (x (n + 1) - 1)/(x - 1)

例如,exponent_sum(4, 4) = (45 - 1)/3 = 1023/3 = 341

所以它的大 O 复杂度与计算 xn

相同

关于c - 在 O(logn) 时间内求出从 k= 0 到 n 的 x^k 的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29055905/

相关文章:

c - 操作系统如何在两个不同的链接中找到共享库路径? :run-time linking (loading) and compile time linking shared library in linux

c++ - 用A*算法遍历图

c - 三环复杂度

algorithm - 寻找复杂性的下限和上限

algorithm - 二分查找的时间复杂度不应该是O(ceil(logn))吗?

python - 缩小输入时的空间复杂度

c - MPFR 程序高精度崩溃

c - 不同的 while 循环(do while vs infinite while),哪个更好?

c - C 中的 While 循环错误

java - 检查单链表的值是否形成回文