【问题标题】:Algo for finding power i.e. n^p [closed]寻找权力的算法,即 n^p [关闭]
【发布时间】: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...我不知道这个算法。读完感觉很简单:-)

标签: c++ c algorithm math


【解决方案1】:

这是exponentiation by squaring>>= 1 是写/= 2 的一种奇特方式。

它背后的想法是,如果p是偶数,你可以取n^(p/2)并平方它;当p 是奇数时,p-1 必须是偶数,所以你可以取n^((p-1)/2),将它平方,然后将结果乘以n,以补偿你在平方之前从p 中减去的1 .

【讨论】:

  • 是的,我知道它的 /=2(p&1) 检查它是否奇怪,但我想知道它背后的逻辑及其复杂性
  • 谢谢你的链接,通过它
  • 啊,谢谢你的解释!明白了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多