【发布时间】:2012-12-24 14:27:51
【问题描述】:
求n^p的算法是:
unsigned long long power(unsigned n, unsigned p)
{
unsigned long long x=1, y=n;
while(p > 0)
{
if(p&1) x *= y;
y *= y;
p >>= 1;
}
return x;
}
有人能解释一下这个算法背后的逻辑/数学吗?我知道它可以工作并针对一些测试用例(试运行)进行了解决。我的意思是它是如何工作的,与一般的幼稚方法相比,它的效率如何。
【问题讨论】:
-
与朴素方法的 O(n) 相比,这是 O(log n)。它将在每次迭代中将指数减半。
-
IITian问一个问题,那肯定很难:p
-
为什么每次迭代都不打印f x, y & p?这将很容易帮助您理解。这段代码基本上会遍历 p 的各个位,而不是运行 i=0 到 p 的循环。
-
Gopi 你应该尝试打印循环中的每个变量,然后你就会知道 1 位的移位运算符是如何变化的......并且结果是在 x 中形成的。
-
顺便说一句,算法+1...我不知道这个算法。读完感觉很简单:-)