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

快速幂及快速幂取模

时间:2015-08-14 23:57:40      阅读:324      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!