zoukankan      html  css  js  c++  java
  • 简单快速幂

    快速幂可以节省大量计算时间

    两种方式  递归和迭代 通常需要取模避免溢出

    1.递归

    #define Mod 100000
    int quick(int a,int n)
    {
        if(n==0)
            return 1;
        else if(n%2==1)
        {
            return quick(a,n-1)*a%Mod;
        }
        else 
        {
            int temp = quick(a,n/2)%Mod;
            return temp*temp%Mod;
        }
    }

    2,迭代

    为了方便理解,从最初开始优化

    例如 7^5 = (7^4)*(7^1) 

    4不断除2

     = (49^2)*(7^1)

     得到结果

    比循环计算速度快,幂越大,速度差距越明显

    #define Mod 100000
    int quick(int a,int n)
    {
        int result = 1;//结果
        while(n>0)//幂次直到为0停止
        {
            if(n%2==0)//次幂为偶数
            {
                n = n/2;
                a=a*a%Mod;  //相当于上文(7^4)中4变2,底数为49  
    
            }
            else//奇数先乘a,计算偶次幂的结果
            {
                n = n-1;
                result = a*result%Mod; //对应上文 (7^5)中先乘7将5减一变偶数
                n = n/2;
                a=a*a%Mod;
            }
        
        }
      return result; }

    合并简化代码

    #define Mod 100000
    int quick(int a,int n)
    {
        int result = 1;
        while(n>0)
        {
            if(n%2==1)
            {
                result = a*result%Mod;
            }    
                n = n/2; 
                a=a*a%Mod;
    
        }
        return result;
    }

    下列小小简化下

    int quick(int a,int n)
    {
        int result = 1;
        while(n)
        {
            if(n&1) //n%2==1 判断为奇数
            {
                result*=a;
            }
         n>>1;//n = n/2 a
    *=a; }
      return result; }
  • 相关阅读:
    memcached启动参数
    Shell 获取当前执行脚本的路径
    linux 下 openssl 编译和交叉编译
    网站更换域名
    linux访问windows共享文件夹
    linux下安装NPM管理工具
    快速构建C++项目工具Scons,结合Editplus搭建开发环境
    C++ Config 配置文件类
    iOS代码Button Demo
    (转)iOS面试题目
  • 原文地址:https://www.cnblogs.com/9527s/p/13209107.html
Copyright © 2011-2022 走看看