序列的第k个数
题目链接:ybt高效进阶6-1-1
题目大意
给你一个等差序列或等比序列的前三项,要你求第 k 项。
思路
等差就直接乘一下,等比就直接快速幂。
代码
#include<cstdio>
#define ll long long
#define mo 200907
using namespace std;
int T;
ll a, b, c, k;
ll ksm(ll x, ll y) {
ll re = 1;
while (y) {
if (y & 1) re = (re * x) % mo;
x = (x * x) % mo;
y >>= 1;
}
return re;
}
int main() {
scanf("%d", &T);
while (T--) {
scanf("%lld %lld %lld %lld", &a, &b, &c, &k);
if (b - a == c - b) {
printf("%lld\n", (a + (b - a) * (k - 1) % mo) % mo);
}
else {
printf("%lld\n", (a * ksm(b / a, k - 1)) % mo);
}
}
return 0;
}