2 条题解
-
1
#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
- 上传者