初学快速幂详细讲解

来源:互联网 发布:单片机datesheet是什么 编辑:程序博客网 时间:2024/05/22 00:45

不扯那么多,我就直接讲解快速幂是怎么样求解计算的;

首先你要知道快速幂是把指数b转换为二进制进行权值进位来计算a的b次方的;例如2的11次方;11的二进制位1011,就是8+0+2+1;a的8次方乘a的2次方再乘a的1次方;每次都把a的权值进一位也就是这样的最开始a在1位为a,第一次是a进一位为a的2次方,第二次就是a的4次方。。。依次类推。

再给大家讲几个小知识有助于理解下面的代码:

&  与运算法则 0&0=0;0&1=0;1&0=0;1&1=1 ;
b&1:如果b是个奇数b&1等于1,如果是个偶数b&1为0;

下面就是模板代码给的有注释

/**********如果求a的b次方对某个数取余,数据太大的话,*可以先对a求余,每次计算sum 都对sum进行求余 * 公式的引理,即积的取余等于取余的积的取余。**********/ #include <stdio.h>void Pow(int a, int b){long long Sum;int Base;Sum = 1;Base = a;while(b){if(b&1)Sum *= Base;Base *= Base;//每次位权值进一位;b>>=1; //b向右移一位(也就是b/=2); }printf("%lld\n", Sum); }int main(){int a, b;long long Sum;while(~scanf("%d %d", &a, &b)){Pow(a,b);}return 0; }
如果有可以改进的地方,可以在评论给我留言,共同学习,谢谢!

0 0
原创粉丝点击