由于一个整数的指数结果很大,可能远远超出计算机处理范围,故必须简化计算方式.这里采用快速取模方法
模的性质:(a*b)mod m = ((a mod m)*(b mod m))mod m,
整数幂的快速求法原理如下:
如求 m^n,则只要把n按二进制展开:如 n = a0*2^0+a1*2^1+.....+ak*2^k;
快速幂求法如下:
- long long FastPow(int m,int n)
- {
- long long res = 1;
- for( ; n ; n>>1 )
- {
- if(n & 1)
- res *= m;
- m *= m ;
- }
- return res;
- }
整数幂快速取模求法 与上面类似:
代码如下:
- long long PowerMod(long long a, int b, int k)
- { //(a^b )%k
- long long tmp = a, ret = 1;
- for(; b ; b>>1 )
- {
- if (b & 1)
- ret = (ret * tmp) % k; //只是每步运算的时候都取模
- tmp = (tmp * tmp) % k;
- }
- return ret;
- }