快速指数运算:平方-乘算法
Posted 气血龙渊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速指数运算:平方-乘算法相关的知识,希望对你有一定的参考价值。
RSA 加解密中存在指数运算
x
a
x^a
xa。
解密过程中运算的指数a非常大,通常会大于等于1024 bit。
一般方法
直接计算 x a x^a xa的值, 即xxx…需要的运算量非常大不实用。
平方-乘算法
设y的初值为x,将a写成二进制形式即0001010…。接下来从左到右数a的每一bit,第一个1不算,从第一个1开始后面遇到0就 y < = y 2 y <= y^2 y<=y2,遇到1就 y < = y ∗ x 2 ∗ , y < = y ∗ x y <= y*x^2*,y<=y*x y<=y∗x2∗,y<=y∗x,一直到最后y值即为结果。
举一个例子,计算 y = x 10 y = x^10 y=x10
将指数a表示为 二进制形式 1010(
a
0
a
1
a
2
a
3
a_0a_1a_2a_3
a0a1a2a3)
1:
y
<
=
x
y <= x\\quad\\quad\\quad\\quad\\quad\\quad\\quad\\quad
y<=x; a0=1,初始化y=x
2:
y
<
=
y
2
=
x
2
y <= y^2 = x^2\\quad\\quad\\quad\\quad\\quad\\,\\,
y<=y2=x2; a1=0,平方
3:
y
<
=
y
2
=
(
x
2
)
2
=
x
4
y <= y^2 = (x^2)^2 = x^4\\quad\\,\\,\\,\\,\\,
y<=y2=(x2)2=x4; a2=1,平方后补乘x
y
<
=
y
∗
x
=
x
4
∗
x
=
x
5
\\quad\\,\\, y <= y*x=x^4*x = x^5\\quad\\quad
y<=y∗x=x4∗x=x5
4:
y
<
=
y
2
=
(
x
5
)
2
=
x
10
y <= y^2 = (x^5)^2 = x^10\\quad\\,\\,\\,
y<=y2=(x5)2=x10; a1=0,平方
通过观察看出,计算量对数下降。
注意<=符号代表y值是递推关系,即:
y
i
+
1
=
y
i
y_i+1=y_i
yi+1=yi
以上是关于快速指数运算:平方-乘算法的主要内容,如果未能解决你的问题,请参考以下文章
模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)
模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)