如何通过更快的方程取幂?

时间:2012-04-12 05:10:33

标签: exponentiation

假设您要计算5^65537而不是乘以5 65537次,建议您((5^2)^16)*5。这导致16次平方和一次乘法。
但我的问题是,你不是通过平方非常大的数字来补偿平方时间的数量吗?当你进入计算机中的基本位乘法时,这怎么会更快。
看完评论后,我有疑问:

     How is the cost of each multiplication not dependant on the size. because when
multiplying the number of bits of the multiplier will increase and this will increase the 
number of additions and the number of left shifts.

1 个答案:

答案 0 :(得分:11)

计算乘法运算:

5^65537 = 65537 multiplications
((5^2)^16)*5 = (2 + 16 + 1) = 19 multiplications.

从这一点来看,你可以看到这项工作要少得多,尽管在较大的数字上进行乘法处理。该算法称为Square and Multiply.

在实践中,需要像这样计算大数的密码系统使用一种名为Modular Exponentiation的技术来避免大量的中间数。