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

    题目链接:https://ac.nowcoder.com/acm/contest/996/A

    关于快速幂介绍:

    • 问题引入:我们在处理ab问题时,一般的做法就是连续乘上b次a,当b很大的时候,就会导致次数过多而超时的问题,而为了减少我们的计算次数,就研究出了快速幂算法。
    • 理解:比如当我们需要计算25时,一般做法即2*2*2*2*2,需要计算五次,而快速幂的思想就是21*24,就只需要计算2次就好了,至于为什么是1和4呢,这就涉及到对5进行二进制处理,52=101,我们发现,为1的数位,我们就需要乘上去,这里有几个1我们就要计算几次,而基数的自己相乘是每一步都在进行的,不管当前是不是1.

    代码实现:

    ll pow(ll a, ll b)
    {
        ll ans = 1;
        while(b)
        {
            if(b & 1)   ans = ans * a;
            a = a * a;
            b >>= 1;
        }
        return ans;
    }
    

    快速幂取模,就是在快速幂的基础上,运用数学公式ab%p = (a % p)b % p % p,进而获知快速幂取模的算法

    ll pow(ll a, ll b, ll p)
    {
        ll ans = 1;
        while(b)
        {
            if(b & 1)   ans = ans * a % p;
            a = a * a % p;
            b >>= 1;
        }
        return ans;
    }
    

      

  • 相关阅读:
    贪心算法1000
    贪心算法1006
    1012
    贪心算法1016
    贪心算法1001
    贪心算法1004
    Java作业1
    指针数组与数组指针的区别
    Java 中对类进行排序的方法(转)
    java习题1
  • 原文地址:https://www.cnblogs.com/ACM-Epoch/p/13339004.html
Copyright © 2011-2022 走看看