快速幂(数论)
題目:
給定a,i,n,求aimodn給定a,i,n,求 a^i mod \quad n 給定a,i,n,求aimodn
最基本的方法是需要i次乘法和取模運算。因為求模有以下性質:
amodn=(amodn)modna \quad mod\quad n = ( a\quad mod\quad n)mod\quad namodn=(amodn)modn
較快的算法是通過
ai={a?ai?1i為奇數(ab/2)2i為偶數a^i= \begin{cases} a * a^{i-1} & i為奇數 \\ \\ (a^{b/2})^2 & i為偶數 \\ \end{cases}ai=??????a?ai?1(ab/2)2?i為奇數i為偶數?
代碼:
typedef long long ll ; ll pow_mod(ll a, ll i) //快速冪 {if (i == 0) //遞歸終止條件return 1 % mod; ll temp = pow_mod(a, i >> 1); //i>>1 是位運算,相當于i/2temp = temp * temp % mod;if (i & 1) //是奇數temp = (ll)temp * a % mod;return temp; }總結
- 上一篇: Leading and Trailing
- 下一篇: 已知gcd和lcm求a+b最小和?---