矩阵快速幂
//求 a^b%1000000007 long c = 1000000007; public long divide(long a, long b) { a %= c; long res = 1; for (; b != 0; b /= 2) { if (b % 2 == 1) res = (res * a) % c; a = (a * a) % c; } return res; }
说明:
(1)为啥偶数情况不会给res赋值:
- 为奇数情况的时候,res仅仅去收集那个落单的a
- 最终b都会变成1,乘res后之前乘的a都不会漏掉
- 就相当于是偶数时用log2的分解,奇数的时候就直接乘落单的