初等数论及其应用——快速幂取模

 

 

  化到这一步,我们就将原来一个数据会非常大的A^B,变成了很多项的乘积。编程实现的时候,我们只需走一遍B的二进制位,并用一个变量a记录当前二进制位的权值,判断当前bi的值,然后将结果乘起来取模即可。快速幂取模通过将指数二进制化和同余性质,将取模操作放入了较小规模的计算,使得我们能够成功的计算较大乘方运算的取余计算。

   而这个过程最为重要的部分在于,它将原来O(n)计算某个数的n次幂,变成了O(logn),大大降低了时间复杂度。

  简单的参考代码如下:

  long long quick_mod(long long a,long long b,long long m)
  //功能 计算a^b(mod m)
{
    long long ans = 1;
    while(b)
    {
         if(b&1)
         {
              ans = (ans * a) % m;
              b--;
         }
         b /= 2;           //b左移一位
         a = a * a % m;
    }
    return ans;
}

  

 同样,我们将这种快速计算幂的思想推广起来,因为幂运算的优化呈现在对于指数的二进制处理,因此我们可以将底数换成任意元素。而一个非常重要的应用是:对于线性代数中的矩阵的快速幂构造。

  单纯说矩阵快速幂也没有太大的难度,我们直接结合矩阵快速幂的一个非常有用的应用来讲。

 

 

   

原文地址:https://www.cnblogs.com/rhythmic/p/5915399.html