zoukankan      html  css  js  c++  java
  • 快速乘,快速幂,十进制快速幂,矩阵快速幂

    快速乘:

    long long quick(long long  a,long long  b,long long c)
    {
     long long ans=0;
     while(b)
      {
        if(b&1) ans=(ans+a)%c;
        b>>=1;
        a=(a+a)%c;
      }
      return ans;
    }

    快速幂:

    long long B_quick(long long  a,long long  b,long long c)
    {
     int ans=1;     
     a=a%c;     
     while(b)  
      {  
        if(b&1) ans=(ans*a)%c; 
        b>>=1;    
        a=(a*a)%c;   
      }  
     return ans;  
    }

    矩阵快速幂:

    矩阵快速幂和快速幂相同,只不过把数字换成了矩阵。

    const int N=10;
    const long long mod=1e9;
    void quick(long long ans[N][N],long long B[N][N],long long  n)
    {
      for(int i=0;i<N;i++) ans[i][i]=1;
      while(n)
       {
          if(n&1) mul(ans,B,mod);
          mul(B,B,mod);
          n>>=1;
       }
    }
    void mul(long long C[N][N],long long D[N][N],long long mod)
    {
      long long sum[N][N]={0};
      int i,j,k;
      for(i=0;i<N;i++)
       for(j=0;j<N;j++)
          for(k=0;k<N;k++)
            sum[i][j]=(sum[i][j]+C[i][k]*D[k][j]%mod);
      for(i=0;i<N;i++)
       for(j=0;j<N;j++)
        C[i][j]=sum[i][j]; 
    }

    十进制快速幂:

    利用二进制的性质有快速幂,当然也可以利用十进制进行快速幂。当指数非常大时,需要通过十进制快速幂对数据进行过渡处理,再利用二进制快速幂求解。

    const long long mod=1e9;
    long long D_quick(long long a,string b,long long mod)
    {
      long long sum=a,ans=1;
      for(int i=b.size()-1;i>=0;i--)
       {
         ans=ans*B_quick(sum,b[i]-'0')%mod;
         sum=B_quick(sum,10);
       }
      return ans;
    }
    本博客仅为本人学习,总结,归纳,交流所用,若文章中存在错误或有不当之处,十分抱歉,劳烦指出,不胜感激!!!
  • 相关阅读:
    javascript实现网页分享至朋友圈功能
    Vue中全局过滤器期与局部过滤器期的使用
    vue中添加与删除,关键字搜索
    vue生命周期
    4种常用的Ajax请求方式
    CSS 基础总结
    BEM思想之彻底弄清BEM语法
    学习前端过程中用到的资料
    深入理解,函数声明、函数表达式、匿名函数、立即执行函数、window.onload的区别.
    html基础
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/11291850.html
Copyright © 2011-2022 走看看