链接
题目描述
给出一个序列前三项,这个序列要么是等差序列,要么是等比数列,求这个序列的第k项
思路
等差就 a k = a 1 + ( k − 1 ) q a_k = a_1+(k-1)q ak=a1+(k−1)q
等比就 a k = a 1 ∗ ( k − 1 ) q a_k = a_1 * (k-1)q ak=a1∗(k−1)q
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const ll mo = 200907;
ll T, a, b, c, k, ans;
ll ksm(ll a, ll b)
{
ll res = 1;
while(b)
{
if(b & 1) res = res * a % mo;
a = a * a % mo;
b >>= 1;
}
return res;
}
int main()
{
scanf("%lld", &T);
while(T--)
{
scanf("%lld%lld%lld", &a, &b, &c);
scanf("%lld", &k);
if(a - b == b - c)
printf("%lld\n", (a + (k - 1) * (b - a)) % mo);
else {
ans = ksm((b / a), k - 1) * a;
printf("%lld\n", ans % mo);
}
}
return 0;
}