有人可以解释这个C代码如何计算2 ^ n?

时间:2013-01-19 17:09:43

标签: c++ algorithm math

这是诀窍的代码。我知道如何在O(logn)时间内计算m ^ n的概念,我认为它是相关的,但是如何?

for(long long int i = 2; N; N /= 2, i *= i){
    if(N & 1){
        ans *= i;
    }
}

2 个答案:

答案 0 :(得分:10)

那是square and multiply algorithm

N / = 2具有去除最低位的效果(当剩余的所有位都为零时,算法结束)。

N& 1检查最低位是奇数还是偶数

答案 1 :(得分:1)

它基本上与log N time m power n算法的工作方式相同。 只需跟踪这两组输入的代码:

P.S:ans应该设置为1。

  1. n = 2的
  2. n = 3的
  3. 我相信你会得到它。