typedeflonglong ll; ll power(ll a, ll n, ll m){ ll result = 1; for (int i = 0; i < n; ++i) { result = (result * a) % m; } return result; }
缺点很明显,一是效率低,容易超时,二是指数爆炸,容易爆 $long long$。
快速幂 分治思想
可以将问题分解成如下的子问题:
写成递归的形式
代码如下
1 2 3 4 5 6 7 8 9
typedeflonglong ll; ll quick_mod(ll a, ll n, ll m){ if (n == 0) return1; elseif (n % 2 == 0) return quick_mod(a * a, n / 2, m) % m; else return ((a % m) * quick_mod(a * a, n / 2, m)) % m; }