2 条题解

  • 1
    @ 2023-6-30 9:33:33
    #include <iostream>
    using namespace std;
    // 求a的b次方对mod取模的值
    long long fastPower(long long a, long long b, long long mod) {
        long long res = 1;
        a = a % mod;
        while (b > 0) {
            if (b % 2 == 1) {
                res = (res * a) % mod;
            }
            a = (a * a) % mod;
            b /= 2;
        }
        return res;
    }
    // 求序列第k项的值
    long long getKthTerm(long long a, long long b, long long c, long long k) {
        if (b - a == c - b) { // 等差数列
            long long d = b - a;
            return (a + (k - 1) * d) % 200907;
        } else { // 等比数列
            long long q = b / a;
            return (a * fastPower(q, k - 1, 200907)) % 200907;
        }
    }
    int main() {
        int T;
        cin >> T;
        while (T--) {
            long long a, b, c, k;
            cin >> a >> b >> c >> k;
            long long result = getKthTerm(a, b, c, k);
            cout << result << endl;
        }
        return 0;
    }
    

    这个代码中,我们首先定义了一个快速幂算法 fastPower,用于求解a的b次方对mod取模的值。然后定义了一个函数 getKthTerm,用于求序列的第k项的值。在 getKthTerm函数中,首先判断序列的类型,如果是等差数列,则计算第k项的值为a + (k - 1) * d;如果是等比数列,则计算第k项的值为a * (q^(k - 1))。最后在主函数中,根据输入的测试数据,调用 getKthTerm函数计算第k项的值,并输出结果。

    分享

    信息

    ID
    502
    时间
    1000ms
    内存
    512MiB
    难度
    5
    标签
    递交数
    31
    已通过
    15
    上传者