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

    1)求an当n很大时如10^9Java也不能处理,这时候要用到快速幂

    0.分治法

    int fastPow(int a, int n) {
        if (n == 1)return a;
        int tmp = fastPow(a, n / 2);
        if (n % 2 == 1)return tmp * tmp * a;
        else return tmp * tmp;
    }

    1.位运算

    n&1,取n的最后一位,并且判断这一位是否需要跳过;

    n>>=1,n右移一位,把刚处理的一位去掉

    int fastPow(int a, int n) {
        int res = 1;
        while (n){
            if (n & 1)res *= a;
            a *= a;
            n >>= 1;
        }
        return res;
    }

    2)快速幂取模
    an %m=(a%m)n %m

    3)矩阵快速幂

    const int mxn = 2;//矩阵的阶
    const int mod = 1e9;
    struct  Matrix
    {
        int m[mxn][mxn];
        Matrix() {
            memset(m, 0, sizeof(m));
        }
    };
    Matrix Multi(Matrix a, Matrix b) {
        Matrix res;
        for (int i = 0; i < mxn; i++)
            for (int j = 0; j < mxn; j++)
                for (int k = 0; k < mxn; k++)
                    res.m[i][j] = (res.m[i][j] + a.m[i][k] * b.m[k][j]) % mod;
        return res;
    }
    Matrix fastPower(Matrix a, int n) {
        Matrix res;
        for (int i = 0; i < mxn; i++)
            res.m[i][i] = i;
        while (n)
        {
            if (n & 1)
                res = Multi(res, a);
            a = Multi(a, a);
            n >>= 1;
        }
        return res;
    }
  • 相关阅读:
    python-Python调用wcf接口
    一个数据驱动的ui自动化框架思路
    selenium分布式部署
    UI自动化-Element is not clickable at point-----问题记录
    idea下载git代码
    windows的hosts文件路径
    端口号
    Hadoop压缩
    MongoDB(单节点)环境配置
    快排
  • 原文地址:https://www.cnblogs.com/xxxsans/p/12807629.html
Copyright © 2011-2022 走看看