快速幂的目的是快速算底数的n次幂,其时间复杂度为 O(log₂N)。
1.原理:
以a的b次方为例:
先把b转化为二进制数,该二进制数第i位的权为a^(i-1)
例如:
**a11 = a(2^0+2^1+2^3) **
11的二进制:1011
因此,我们将a¹¹转化为算 a2^0 × a2^1 × a2^3
#include<stdio.h>
#include<math.h>
const int MOD = 1000000007;
long long Quick_Mod(long long a,long long b){
long long t,y;
t=1; y=a;
while (b!=0){
if (b&1==1) t=t*y%MOD;
y=y*y%MOD;
b=b>>1;
}
return t;
}
int main(void)
{
int t,m,n;
scanf("%d",&t);
while(t--){
scanf("%d%d",,&m,&n);
printf("%lld\n",Quick_Mod(m,n));
}
return 0;
}