zoukankan      html  css  js  c++  java
  • 快速幂取模算法

    什么是快速幂?

    快速幂应当是快速幂取模的简称

    对于一般的求幂算法,求$a^b\,mod\,m$,即使用循环b次的方法,复杂度是$O(b)$的,当b很大的时候,这种算法就会显得十分缓慢。

    快速幂是基于以下明显的事实:

    $${a^b} equiv {(a^2)^{frac{b}{2}}} pmod{m}quad b is even$$

    $${a^b} equiv {(a^2)^{frac{b}{2}}*a} pmod{m}quad b is odd$$

    那么我们得到这样一个算法,如果当前的$b$是偶数,那么$a$就取平方,否则取$a^2*a$,每次$b=b/2$。算法的复杂度是$O(log b)$。

    代码

    递归版 

    typedef long long LL;
    //calculate a^b%m
    LL Pow(LL a,LL b,LL m) {
        if (b == 0)
            return 1;
        if (b & 1)
            return Pow(a * a, b >> 1, m) * a;
        else
            return Pow(a * a, b >> 1, m);
    }

    非递归版

    typedef long long LL;
    //calculate a^b%m
    LL Pow(LL a,LL b,LL m) {
        LL res = 1;
        while (b) {
            if (b & 1)res *= a;
            a *= a;
            b >>= 1;
        }
        return res;
    }
  • 相关阅读:
    Django 中间件
    Django之ORM介绍
    ORM相关操作
    Django Form表单
    Django REST framework 中文文档
    前端基础之BOM和DOM
    Django--ORM(2)
    Django--视图
    Django--路由系统
    Django--模板语言
  • 原文地址:https://www.cnblogs.com/HarryGuo2012/p/4779773.html
Copyright © 2011-2022 走看看