快速指数运算:平方-乘算法

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<=yx2,y<=yx,一直到最后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<=yx=x4x=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#计算程序运行时间)

快速幂运算模板

用C语言编写一个计算器程序,实现加,减,乘,除,求平方根(正数),倒数等功能.

实指数幂