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; }
  • 相关阅读:
    Python with语句和过程抽取思想
    HTML DOM 学习
    暴力破解( Hydra | Medusa)
    CSRF漏洞原理浅谈
    文件包含漏洞原理浅探
    JavaScript BOM学习
    PHP命令执行漏洞初探
    一段思考
    文件上传解析漏洞
    谈谈Javascript的this关键字(this is not this)
  • 原文地址:https://www.cnblogs.com/9527s/p/13209107.html
Copyright © 2011-2022 走看看