序列的第k个数(快速幂)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列的第k个数(快速幂)相关的知识,希望对你有一定的参考价值。

序列的第k个数

输入样例

2
1 2 3 5
1 2 4 5

输出样例

5
16

解题思路

判断等差数列是很简单

  1. b-a==c-b
  2. 或者a+c==2*b

求等差数列也很简单

a n = a 1 + ( k − 1 ) ∗ ( a 2 − a 1 ) a_n=a_1+(k-1)*(a_2-a_1) an=a1+(k1)(a2a1)

那么问题就在求等比数列

a n = a 1 ∗ ( a 2 ÷ a 1 ) k − 1 a_n=a_1*(a_2 \\div a_1)^k-1 an=a1(a2÷a1)k1

如果 k k k大一点,暴力肯定是会超时

所以我们用快速幂来优化

AC代码

#include<cstdio>
using namespace std;
int T;
const long long Mod=200907;
long long ksm(long long x,long long y)//快速幂

	long long ans=1ll;
	while(y)
	
		if(y&1ll)ans=(ans*x)%Mod;
		y>>=1ll;
		x=x*x%Mod;
	
	return ans;

int main()

	scanf("%d",&T);
	while(T--)
	
		long long a,b,c,k;
		scanf("%lld%lld%lld%lld",&a,&b,&c,&k);
		if(a+c==b*2)printf("%lld\\n",1ll*a+1ll*(k-1)*(b-a)%Mod);//等差数列
		else printf("%lld\\n",1ll*a*ksm(b/a,k-1)%Mod);//等比数列
	
	return 0;
 

谢谢

以上是关于序列的第k个数(快速幂)的主要内容,如果未能解决你的问题,请参考以下文章

序列的第k个数(快速幂)

1289. 序列的第k个数快速幂

一本通 1615:例 1序列的第 k 个数

信息学奥赛一本通 提高篇 序列第k个数 及 快速幂

loj10193. 「一本通 6.1 例 1」序列的第 k 个数

信息学奥赛一本通Part6.1 数学基础-快速幂