快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log?N), 与朴素的O(N)相比效率有了极大的提高。
原理:
以下以求a的b次方来介绍
1 int pow1(inta,intb){
2 int ans=1;
3 while(b--)
4 ans*=a;
5 return ans;
6 }
二分求幂(一般)
1 int pow2(inta,intb){
2 int ans=1 , temp=a;
3 while(b){
4 if(b%2)
5 ans*=temp;
6 temp*=temp;
7 b/=2;
8 }
9 return ans;
10 }
快速求幂(位操作)
1 int pow3(inta,intb){
2 int ans = 1 , temp = a ;
3 while(b){
4 if(b&1) //b%2 = b&1
5 ans*=temp;
6 temp*=temp;
7 b>>=1; //b/2 = b>>1
8 }
9 return ans;
10 }
原文:http://www.cnblogs.com/My-Sunshine/p/4868786.html