求x^m 一般方法是 xm = x * xm-1,这样需要做m次乘法,未免过慢.
显然当m为偶数时m会减半,当m为奇数时,下次就是偶数.m可以很快收敛到0.(^表示幂)
2.将m看成二进制串mkmk-1...m1m0,那么xm = xm02^0 + m12^1 + ... + mk2^k = xm02^0 xm12^1 ... xmk*2^k. mi为0或1,假设平均有一半mi为1,即k个,那么总共才只需要做(k+(k/2))次乘法.
下面给出代码.第一个方法是加速方法1,第二个方法是加速方法1的迭代形式,第三个方法是加速方法2.
用快速幂取模的方法比直接求幂再取模的方法要快,因为将乘数限制在一定的范围.