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

快速幂

时间:2014-12-23 23:54:31      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:

快速幂

  如何快速计算nm?我们采用从特殊到一般的数学思想:

  假设n=2,m=10

  直接算的结果是2*2*2*2*...*2  计算了10次

  快速幂的思想是将m二进制化

  210=4*16*16 计算了3次

  同理可得,nm用快速幂来计算的过程是使底数不断倍增,指数倍减,达到时间上的优化:O(N)->O(logN)

  模板:

 1 //读者可以根据自己的需要,更改返回值的类型
 2 long long qpow(long long d){
 3     long long a=10,ans=1;//我们假设是求10^d
 4     while(d>0){
 5         if(d&1)ans=(ans*a)%n;//当指数倍减至奇数时,和答案相乘
 6         a=(a*a)%n;//底数倍增
 7         d>>=1;//指数倍减
 8     }
 9     return ans;//返回答案
10 }
11 //根据二进制的拆分,时间复杂度是对数级别的

 

 

 

快速幂

标签:

原文地址:http://www.cnblogs.com/maopengsen/p/4181382.html

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