码迷,mamicode.com
首页 > 其他好文 > 详细

快速幂

时间:2015-07-14 17:52:44      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

快速幂

标签:

原文地址:http://www.cnblogs.com/threezj/p/4645717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!