2 条题解

  • -2
    @ 2024-12-29 17:23:23
    #include <iostream>
    using namespace std;
    
    // 计算最大公约数,用于判断两个数是否互质
    long long gcd(long long a, long long b) {
        return b == 0? a : gcd(b, a % b);
    }
    
    // 快速幂取模函数,用于高效计算 (a^n) % m
    long long powMod(long long a, long long n, long long m) {
        long long res = 1;
        a %= m;
        while (n > 0) {
            if (n & 1) {
                // 如果n的二进制最低位为1,累乘当前的a
                res = res * a % m;
            }
            a = a * a % m;
            n >>= 1;  // 右移一位,相当于n /= 2
        }
        return res;
    }
    
    int main() {
        long long p, b, n;
        cin >> p >> b >> n;
        // 判断b与p是否互质,如果不互质直接输出 -1
        if (gcd(b, p)!= 1) {
            cout << -1 << endl;
            return 0;
        }
    
        bool found = false;
        for (long long l = 1; l < p; l++) {
            if (powMod(b, l, p) == n) {
                cout << l << endl;
                found = true;
                break;
            }
        }
        if (!found) {
            cout << -1 << endl;
        }
        return 0;
    }
    

信息

ID
61
时间
1000ms
内存
256MiB
难度
6
标签
递交数
202
已通过
7
上传者