快速幂题目列表

快速幂

  • 认识快速幂
    所谓的快速幂,表示的是快速的计算一个数的幂次,使用的是分治的思想,举个例子:
    我们要求的是2^105,那么正常的求幂次的方法的时间复杂度是105次,采用幂次之后可以把105写成二进制1101001,那么105可以写成2^0 + 2^3 + 2^5 + 2^6,只要循环6次即可算出答案,又因为一般的答案会很大所以会有一个取模的操作,一定要每一步的乘积都要取模。
  • 代码:
    int quickpow(int a, int n) {
        int ans = 1;  
        while(n) {
            if(n & 1) {
                //表示二进制最后一位是1,这里的a表示的是a对应的次方
                ans = (ans * a) % mod;
            }  
            a = (a*a) % mod;  
            n = n >> 1;
        }
    }
    

快递幂

https://www.lanqiao.cn/problems/1514/learning/?page=1&first_category_id=1&sort=students_count&problem_id=1514

  • 代码:
    #include <iostream>
    using namespace std;
    typedef long long ll;
    
    ll quickpow(ll a, ll n, ll mod) {
        ll ans = 1;
        a = a % mod;
        while(n) {
            if(n & 1) {
                ans = (ans * a) % mod;
            }
            a = (a * a) %mod;
            n = n >> 1;
        }
        return ans;
    }
    
    int main()
    {
        ll b, p, k;
        cin >> b >> p >> k;
        ll ans = quickpow(b, p, k);
        cout << ans % k;
    }
    
posted @ 2023-11-02 10:33  铜锣湾陈昊男  阅读(28)  评论(0)    收藏  举报