1 solutions

  • 0
    @ 2024-9-13 17:33:49

    注意本题数据比较大,所以要用快速幂。因为是a^b,其中的b我们可以拆分成二进制加和的形式。对于二进制上的每一位分别都是2^n。那么a^b就变成了aΣ2k(其中k代表b拆分成二进制数中为1的位数。答案变成了

    a2k_1 * a2k_2 * ……

    然后对于每一个a2ki其实都是对上一个a的值取平方a2ki-1²得到的。

    #include<bits/stdc++.h>
    using namespace std;
    
    long long a, b, p;
    long long ans = 1;
    
    int main(){
        cin>>a>>b>>p;
        
        for(; b; b >>= 1){
            if(b & 1) ans = ans * a % p;
            a = a * a % p;
        }
        
        ans %= p;
        cout<<ans<<endl;
        return 0;
    }
    
    
    • 1

    Information

    ID
    491
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    # Submissions
    9
    Accepted
    3
    Uploaded By