题目-序列的第 K K K个数

在这里插入图片描述

问题分析

要求很简单, 分类计算等差或者等比数列的第 k k k项即可, 乘方部分使用快速幂算法, 乘法部分使用龟速乘算法, 算法时间复杂度 log ⁡ k \log k logk

代码实现

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
const int MOD = 200907;

int a, b, c;
int k;

LL q_pow(LL a, LL b) {
   
    LL ans = 1 % MOD;
    while (b) {
   
        if (b & 1) ans = ans % MOD * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return ans;
}

LL mul(LL a, LL b) {
   
    LL ans = 0;
    while (b) {
   
        if (b & 1) ans = (ans + a) % MOD;
        a = (a + a) % MOD;
        b >>= 1;
    }
    return ans;
}

void solve() {
   
    cin >> a >> b >> c >> k;
    if ((LL) b - a == (LL) c - b) {
   
        LL d = b - a;
        LL ans = a + mul(d, k - 1) % MOD;
        cout << ans % MOD << '\n';
    }
    else {
   
        int q = b / a;
        LL ans = a % MOD * q_pow(q, k - 1) % MOD;
        cout << ans << '\n';
    }
}

int main() {
   
    ios::sync_with_stdio(false);
    cin.tie(0);

    int T;
    cin >> T;
    while (T--) solve();

    return 0;
}