快速幂

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;
}
复制代码
posted @   XXXSANS  阅读(296)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· Tinyfox 发生重大改版
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· 小米CR6606,CR6608,CR6609 启用SSH和刷入OpenWRT 23.05.5
· 近期最值得关注的AI技术报告与Agent综述!
点击右上角即可分享
微信分享提示