快速幂

acm训练中碰到的  题目 HDU  2035 ,1097

求 A^B   其实就是把B不断二分降次   得到 (A^2)^(B/2)

若B%2==1 则要特殊处理   即 A*(A^2)^(B/2)

下面给出 递归 和非递归代码

 1 int power(int a,int b)

 2 {

 3     int res=1;

 4     if(b==1)

 5         return a%1000;

 6     if(b%2==0)

 7         res=res*power(a*a%1000,b/2)%1000;

 8     else

 9         res=res*a*power(a*a%1000,(b-1)/2)%1000;

10     return res;

11 } 

非递归

 1 int power(int a,int b)

 2 {

 3     int res=1;

 4     a=a%10;

 5     while(b>=1)

 6     {

 7         if(b%2==1)

 8             res=res*a%10;

 9         b=b/2;

10         a=(a*a)%10;

11     }

12     return res;

13 }

 

你可能感兴趣的:(快速)