快速模幂详解

2019-04-13 17:16发布

对于 a^b mod k,怎么求解? 首先a*b mod c = (a mod c )*b mod c   将b表示成二进制形式 b = bnbn-1…b1b0
a^b mod k = a^(bnbn-1…b1b0) mod k
= a^(b0*2^0)*a^(b1*2^1)*…*a(bn*2^n) mod k
= c0*c1*…*cn mod k
= (c0 mod k) * c1 mod k)*…*cn) mod k  
n^m%mod代码
  1. long long Pow(long long n ,long long m, int mod)  
  2. {  
  3.     long long res = 1;  
  4.     while(m >= 1)  
  5.     {  
  6.         if(m & 1)  
  7.         {  
  8.             res = (res * n ) % mod;  
  9.         }  
  10.         n = n * n % mod ;  
  11.         m >>= 1;  
  12.     }  
  13.     return res;  
  14. }