1
421
平方求幂。
这是在非对称密码学中对大量数字进行模幂运算的标准方法。 |
2
81
注意 exponentiation by squaring 这不是最理想的方法。作为一种适用于所有指数值的通用方法,这可能是最好的方法,但对于特定的指数值,可能会有一个需要较少乘法的更好的序列。 例如,如果要计算x^15,则通过平方求幂的方法将提供:
addition-chain exponentiation .
没有有效的算法来寻找这个最优的乘法序列。从…起 Wikipedia :
|
3
28
如果你需要将2提升到一个幂。实现这一点的最快方法是通过电源进行位移位。
|
4
14
下面是Java中的方法
|
5
8
|
6
8
复杂性=O(对数(经验))
复杂性=O(对数(经验)) |
7
8
一个非常特殊的情况是,当你需要说2^(-x到y)时,其中x当然是负数,y太大,不能在int上进行移位。你仍然可以在固定的时间内用一个浮点数来做2^x。
使用双精度作为基本类型可以获得更多的2次幂。 IEEE floats ,则可能会出现其他特殊的求幂情况。 |
8
6
如果要将2的整数值提升为某事物的幂,最好使用shift选项:
这是更有效的。 |
9
4
作为对平方求幂效率评论的后续。 这种方法的优点是它以日志(n)时间运行。例如,如果你要计算一些巨大的东西,比如x^1048575(2^20-1),你只需要通过循环20次,而不是使用简单的方法计算100多万次。 另外,根据la Pramod的建议,就代码复杂度而言,这比试图找到最佳的乘法序列要简单。 编辑:
|
10
2
迟到的人:
|
11
1
考虑负指数网的更一般解
|
12
1
|
13
0
|
14
0
如果exp为偶数,我使用递归,5^10=25^5。
|
15
0
除了Elias的答案之外,当使用有符号整数实现时,会导致未定义的行为,当使用无符号整数实现时,会导致高输入值不正确, 下面是一个经过修改的平方幂运算版本,它也适用于有符号整数类型,并且不会给出错误的值:
如果发生溢流或包裹,
我曾经
|
16
0
我已经实现了一个算法,它可以记住所有计算出的幂,然后在需要时使用它们。例如,x^13等于(x^2)^2^2*x^2^2*x,其中x^2^2是从表中提取的,而不是再次计算。这基本上是@Pramod answer的实现(但在C#中)。 所需的乘法数为Ceil(对数n)
|
17
0
是的,它是递归的,但是一个好的优化编译器会优化递归。 |
18
-1
我的情况有点不同,我试图用电源制作一个面具,但我想我还是会分享我找到的解决方案。 显然,它只适用于2的幂。
|
19
-1
需要在运行时知道指数,
|
Community wiki · C中有哪些耗时的操作? 1 年前 |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |