快速幂
顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。
原理
以下以求a的b次方来介绍
把b转换成二进制数。
该二进制数第i位的权为

例如

11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算


代码如下:
- long long modexp(long long a, long long b, int mod)
- {
- long long res=1;
- while(b>0)
- {
- //a=a%mod;(有时候n的值太大了会超出long long的储存,所以要先取余)
- if(b&1)//&位运算:判断二进制最后一位是0还是1,&的运算规则为前后都是1的时候才是1;
- res=res*a%mod;
- b=b>>1;//相当于除以2;
- a=a*a%mod;
- }
- return res;
- }