矩阵快速幂

//求 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的分解,奇数的时候就直接乘落单的
posted @ 2022-03-08 14:50  bonel  阅读(8)  评论(0编辑  收藏  举报