【快速幂】序列第k个数

链接

YbtOJ 6-1-1

题目描述

给出一个序列前三项,这个序列要么是等差序列,要么是等比数列,求这个序列的第k项

思路

等差就 a k = a 1 + ( k − 1 ) q a_k = a_1+(k-1)q ak=a1+(k1)q
等比就 a k = a 1 ∗ ( k − 1 ) q a_k = a_1 * (k-1)q ak=a1(k1)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;
}

おすすめ

転載: blog.csdn.net/LTH060226/article/details/121567313