3 条题解

  • 2
    @ 2024-4-20 21:44:21

    直接一个快速幂 非常的简单 由于题目要求输出后三位 直接对1000进行取模 最后判断前导0 输出即可 下面是两种较优的方案 再优化就是快读我也不会(0v0) (过了就是好代码)

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    
    // 递归快速幂
    
    // LL QuickPow(LL a, LL n, LL p)
    
    // {
    
    //     if (a == 0)
    
    //         return 1;
    
    //     else if (n % 2 == 1)
    
    //         return (QuickPow(a, n - 1, p) \* a) % p;
    
    //     else
    
    //     {
    
    //         int temp = (QuickPow(a, n / 2, p)) % p;
    
    //         return temp \* temp;
    
    //     }
    
    // }
    
    // 循环快速幂
    
    LL QuickPow(LL a, LL n, LL p)
    
    {
    
        int ans = 1;
    
        while (n)
    
        {
    
            if (n & 1)
    
            {
    
                ans = ((ans % p) \* (a % p)) % p;
    
            }
    
            a = (a % p \* a % p) % p;
    
            n >>= 1;
    
        }
    
        return ans % p;
    
    }
    
    
    int main()
    
    {
    
        LL a, n, p;
    
        cin >> a >> n >> p;
    
        p = 1000;
    
        int Q = QuickPow(a, n, p);
    
        if (Q < 100)
    
        {
    
            if (Q > 10)
    
            {
    
                cout << '0' << Q;
    
                return 0;
    
            }
    
            cout << "00" << Q;
    
            return 0;
    
        }
    
        cout << Q;
    
    
        return 0;
    
    }
    

    信息

    ID
    31
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    125
    已通过
    24
    上传者