24 条题解

  • 4
    @ 2022-3-12 10:29:27

    我来水题解了

    一道典型的快速幂模板题。 (这不是废话吗)

    考虑aba^b,我们将bb表示成二进制形式,然后定义一个basebase作为基数,一开始等于aa。从右往左遍历bb的每一位,如果当前位为11则给答案ansans乘上对应的基数basebase,然后将basebase变为其平方。最后ansans就是答案。

    复杂度O(logb)O(logb)

    注意:以上操作实现过程中均要对pp取模。

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    int a,b,mod;
    int ksm(int x,int p)
    {
        int base=x;
        int ans=1;
        //下面运用了一些位运算小技巧。
        while(p)
        {
            if(p&1)ans=ans*base%mod;
            p>>=1;
            base=base*base%mod;
        }
        return ans%mod;
    }
    signed main()
    {
        cin>>a>>b>>mod;
        cout<<ksm(a,b);
        return 0;
    }
    

    信息

    ID
    171
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    876
    已通过
    295
    上传者