题目-序列的第 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;
}

京公网安备 11010502036488号