算法寻找功率,即n^p
Algo for finding power i.e. n^p
用于查找 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;
}
有人可以解释该算法背后的逻辑/数学。我知道它有效并在一些测试用例(干式运行)中进行了工作。我的意思是它是如何工作的,以及从一般天真的方法中如何有效的。
这是Squaring :>>= 1
是编写/= 2
的方式。
其背后的想法是,如果p
甚至是,您可以服用n^(p/2)
并与之保持平方。当p
奇数时,p-1
必须是均匀的,因此您可以将n^((p-1)/2)
进行平衡,然后将结果乘以n
,以补偿您从p
减去的1
。
相关文章:
- QT在错误的班级中寻找空位
- 正在寻找C++不可变的hashset/hashmap
- 寻找地理和伤害意味着超载
- 寻找一种更好的方法来表示无符号字符数组
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量
- 寻找闰年的逻辑是如何运作的?
- 如何编写计算功率的循环
- C++:寻找"returning address of local variable..."的更正
- 在C++中寻找排列和组合
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 寻找解决这个动态编程问题的提示
- 寻找最小楼梯成本的动态规划问题的错误答案
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- Homebrew OS X OpenCV - 在另一台Mac上运行时寻找dylib
- 我只是在寻找模板,在我的书中找到了这段代码,这显示了隔离错误?
- 2分频浮动功率的优化
- 寻找C++中数组和cout交互的解决方案
- C++原理和练习练习-从输入值n中寻找素数
- 算法寻找功率,即n^p