如果存储空间足够的话,可以事先将一部分计算结果(比如指数很小时的运算结果)存储起来,到后面需要时再直接调用。窗口算法就用到了这种思想,它一次可以处理指数e的多个比特(不妨设为k比特,而k称为窗口的大小)。当窗口大小为k时,可以预先将计算出来并进行存储(不妨记),然后对e进行进制展开,接着按平方和算法的思想进行迭代即可。
下面是窗口算法的简单描述。关于窗口算法的更多情况可参见[10,算法14.82]。
───────────────────────────────────────
───────────────────────────────────────
同样以上面那个例子e=165来看看窗口算法。假设取窗口宽度k=3,则e的8进制展开为,那么按照窗口算法思想计算模指数的过程为:
Step1:预计算g1、g2、……、g7;
Step2:初始化A: A ← 1;
Step3:迭代过程如下:
表4.2
i |
Step 3.1) |
Step 3.2) |
|
2 |
A←A8=1 |
ei=2 |
A←A×g2=g2 |
1 |
A←A8=g16 |
ei=4 |
A←A×g4=g20 |
0 |
A←A8=g160 |
ei=5 |
A←A×g5=g165 |