首页 > 其他 > 详细

快速幂及快速幂取模

时间:2015-08-14 23:57:15      阅读:439      评论:0      收藏:0      [点我收藏+]

快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log?N), 与朴素的O(N)相比效率有了极大的提高。——bybaidu

快速幂可以用位运算这个强大的工具实现。

代码:

技术分享
 1 int pow(int a,int b)
 2 {
 3     int ans=1;
 4     while(b!=0)
 5     {
 6         if(b&1)
 7             ans*=a;
 8         a*=a;
 9         b>>=1;
10     }
11     return ans;
12 }
View Code

 

快速幂取模需要记住一个定理:积的取模等于取模积的取模;算法是蒙哥马利算法(Orz……)

代码:

技术分享
 1 int  pow%(int a,int b,int c)
 2 {
 3     int ans=1;
 4     while(b!=0)
 5     {
 6         if(b&1)
 7          ans=(ans*a)%c;
 8         a=(a*a)%c;
 9         b>>=1;
10     }
11     return ans;
12 }
View Code

 

我今天突然发现x>>1其实就是原数 div 2,同理x>>n即为x div 2^n;

x<<n 则为x*2^n;

算是意外的收获吧,yes!

快速幂及快速幂取模

原文:http://www.cnblogs.com/TYH-TYH/p/4731377.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!