码迷,mamicode.com
首页 > 编程语言 > 详细

快速幂算法的理解

时间:2015-03-20 18:47:49      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

首先给出代码:

#include <iostream>     
using namespace std;     

//计算a^bmodn     
int modexp(int a,int b,int n)     
{     
    int ret=1;     
    int tmp=a;     
    while(b)     
    {       
       if(b&1) 
           ret=ret*tmp%n;     
       tmp=tmp*tmp%n;     
       b>>=1;     
    }     
    return ret;     
}     

int main()     
{     
    cout<<modexp(2,10,3)<<endl;     
    return 0;     
}    

接下来进行讲解,快速幂算法,就是快速求 x^n mod (m) 的快速算法。
比如:

计算 12996^227 mod 37909
设m = 37909 , b = 12996, 令a = 1, 将227二进制表示为:227 = 1 + 2 + 2^5 + 2^ 6 + 2^7;
依次计算 12996^227 = 12996 + 12996^2 + 12996^2^5 + 12996^2^ 6 + 12996^2^7;
运用二进制操作,也就是二分的思想,可以达到O(logn)。二进制扫描从最高位一直扫描到最低位。
运用上面的例子:

 if(227&1) //也就是说存在2的某次幂不为0,所以需要计算; 
 ………………
 227>>=1 //右移一位,继续检查。

快速幂算法的理解

标签:

原文地址:http://blog.csdn.net/u014427196/article/details/44493835

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