Description
一串数,要么要么等差,要么等比,求第k个
Algorithm
直接用通项公式就可以算了。然后算等比的用快速幂算法进行加速
Hint
- 输入很大,要使用long long
- 没进行一步运算都要 % kmod 不然就错了
Code
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
const int kmod = 200907;
ll qpow(ll x, ll n)
{
ll y = 1;
while (n > 0)
{
if (n & 1) y = (y * x) % kmod;
x = x * x % kmod;
n >>= 1;
}
return y % kmod;
}
void solve()
{
ll a, b, c, k;
cin >> a >> b >> c >> k;
ll ans;
if (b - a == c - b)
{
ans = ((a % kmod) + ((k - 1) % kmod) * ((b - a) % kmod)) % kmod;
cout << ans % kmod << endl;
return;
}
ans = (a % kmod * qpow((b / a) % kmod, k - 1)) % kmod;
cout << ans << endl;
}
int main()
{
ll n;
cin >> n;
for (ll i = 0; i < n; i++)
solve();
}
本文详细介绍了如何通过通项公式解决等差或等比数列求第k个元素的问题,并提供了快速幂算法的实现来加速等比数列的计算。重点强调了大输入情况下使用longlong类型的重要性以及每一步运算都需要取模以避免溢出。通过实例代码演示了解题过程。
199

被折叠的 条评论
为什么被折叠?



