题目传送门
题意:
现在给你序列的前三项,这个序列要么是等差序列,要么是等比序列,求出第 k 项的值。 如果第 k 项的值太大,对 200907 取模。
题解:
通项公式+快速幂
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 200907
int quickpow(int a,int b,int n)
{
if (b == 1)
return a;
else
{
if (b % 2 == 0)
{
ll t = quickpow(a, b / 2, n);
return t * t%n;
}
else
{
ll t = quickpow(a, b / 2, n);
t = t * t%n;
t = t * a%n;
return t;
}
}
}
int main()
{
int t;
cin >> t;
while (t--)
{
ll a, b, c, k;
cin >> a >> b >> c >> k;
if (a == b && b == c)
cout << a%mod << endl;
else if (b - a == c - b)
{
ll cha = b - a;
cout << (cha%mod * (k - 1)%mod)%mod + a << endl;
}
else
{
ll q = b / a;
cout << quickpow(q, k - 1, mod)*a%mod << endl;
}
}
return 0;
}