快速降幂[C/C++]

快速幂的目的是快速算底数的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;
 } 

猜你喜欢

转载自blog.csdn.net/qq_43724031/article/details/86740542
今日推荐