对于 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代码
- long long Pow(long long n ,long long m, int mod)
- {
- long long res = 1;
- while(m >= 1)
- {
- if(m & 1)
- {
- res = (res * n ) % mod;
- }
- n = n * n % mod ;
- m >>= 1;
- }
- return res;
- }