SO 上的其他一些主题提到了 Brickell 等人的论文“<a href="http://www.ccrwest.org/gordon/fast.pdf" rel="nofollow">Fast Exponentiation with Precomputation”,其中,除了与二进制数字对应的幂的预计算的简单概念外,还有一个关于“循环移位求幂”的声明(据我所知)。不幸的是,论文的那部分是用一种非常笼统的形式表达的,所以我根本无法弄清楚他们是否在谈论一些明显变得复杂的东西,而不是 2**n,或者真的存在某种其他的求幂方法比乘法(平方)?
例如,假设我们有x = 5
(这是00101
二进制的)。怎么可能以y = 5 * 5
(11001
二进制)结束,只使用位移位,也许还有一些加法?当然,算法应该比乘法更有效——答案是“你可以通过一堆位移和加法来模拟每个乘法,因为y = (5 << 2) + (5 << 0)
”不算数。好吧,如果稀疏数字很常见,它可以计算,但这不是常见的情况,并且确定确切的位数也很耗时,因此,除非数字非常稀疏,否则不值得尝试,越是这样每次平方后都需要进行新的评估。