在某些情况下,我们需要求模 N 情况下某个数的多次幂,例如:
求多次幂结果的最后几位数
RSA算法的加解密
如果底数或者指数很大,直接求幂再取模很容易会出现数据溢出的情况,产生错误的结果,同时如果简单的重复乘以某个数求其多次幂,速度很慢,这时候就需要用到快速幂取模了,一般也简称快速幂。
快速幂取模基于下面这条引理:
积的取余等于取余的积的取余
即 (a * b) % N 等价于 ( (a % N) * (b % N) ) % N
例如:(13 * 5) % 3 = ( (13 % 3) * (5 % 3) ) % 3
通过计算可以知道上述等式是成立的,而且也不难理解上述引理的正确性,这里就不过多赘述。
求 a^b % N,我们知道,如果 a 或者 b 较大的话,先求幂再取模就有可能导致数据溢出,所以如何解决这一问题就显而易见了,根据引理,我们可以边求幂边取模,避免直接求幂导致的数据溢出。