zoukankan      html  css  js  c++  java
  • AC_快速积&快速幂的计算方法

    快速幂算法——可迅速求出a^b。其主要理论依据如下:

            1,当b为偶数时,a^b可以转为a^2的b/2次方。

            2,当b为奇数时,a^b可以转为a^2的b/2次方,再乘以a。

    //简单来说就是把b当成2进制形式,然后累加;
    // 2*7=2*(1*2^0+1*2^1+1*2^2)=2*1*2^0+2*1*2^1+2*1*2^2;

    //快速幂——加法
    //简单来说就是把b当成2进制形式,然后累加;
    // 7 = 111
    // 2*7=2*(1*2^0+1*2^1+1*2^2)=2*1*2^0+2*1*2^1+2*1*2^2;
    // = 2*1 + 2*2 + 2*4
    // = 2 + 4 +8
    // = 6 + 8
    // = 14

    // 2*(1*2^0) = 2   

    // 2*(1*2^1) = 4

    // 2 * (1*2^2) = 8

    代码:

    long long cul_sum(long a, long b)
    {
        long ans = 0;
        while (b)
        {
            cout << "-------------" << endl;
            if (b & 1)
            {
                ans = ans + a;//将每一项的值加起来  合并最后的结果
                cout << "ans = " << ans << endl;
            }
            a = a + a; //计算每一项的值
            b >>= 1;
            cout << "a = " << a << endl;
        }
        return ans;
    }
    
    int main()
    {
        long a, b;
        cin >> a >> b;
        cout<<cul_sum(a, b) << endl;
        return 0;
    }

    计算结果如下:

     快速幂——乘方

    //快速幂——乘方
    //简单来说就是把b当成2进制形式,然后累乘;
    // 7 = 111
    // 2*7=2^(1*2^0+1*2^1+1*2^2)=2^(1*2^0) * 2^(1*2^1) * 2^(1*2^2);
    // = 2^1 * 2^2 * 2^4
    // = 2 * 4 * 16
    // = 8 * 16
    // = 128
    #include<iostream>
    using namespace std; 
    long long cul_multi(long a, long b)
    {
        long ans = 1;
    
        while (b)
        {
            cout << "-------------" << endl;
            if (b & 1)
            {
                ans = ans * a;
                cout << "ans = " << ans << endl;
            }
            a = a * a;
            cout << "a = " << a << endl;
            b >>= 1;
        }
        return ans;
    }
    int main()
    {
        long a, b;
        cin >> a >> b;
        cout<<cul_multi(a, b) << endl;
        return 0;
    }

     

  • 相关阅读:
    树状数组进阶
    vscode远程连接linux服务器
    常用的协议以及协议相对应的端口号
    C++四种强制类型转化
    口胡(然而有代码)<第二章>
    11.TED演讲:如何赚更多钱?读后感
    tomcat一些认识
    压测ab
    mysql 加表字段
    最短Hamilton路径
  • 原文地址:https://www.cnblogs.com/gcter/p/11155902.html
Copyright © 2011-2022 走看看