zoukankan      html  css  js  c++  java
  • 初等数论及其应用——快速幂取模

     

     

      化到这一步,我们就将原来一个数据会非常大的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;
    }

      

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

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

     

     

       

  • 相关阅读:
    hadoop下生成echarts关系图
    MongoDB实现增删查方法
    Hadoop中配置环境后重启失效解决方法
    Ubuntu中linux虚拟机全屏
    第二周第三天
    构建之法阅读笔记02
    第二周第二天
    第二周第一天
    学习进度条第五周
    第一周第七天
  • 原文地址:https://www.cnblogs.com/rhythmic/p/5915399.html
Copyright © 2011-2022 走看看