快速幂 - 序列的第k个数 - AcWing 1289
发布日期:2021-05-07 20:02:07 浏览次数:13 分类:技术文章

本文共 1560 字,大约阅读时间需要 5 分钟。

快速幂 - 序列的第k个数 - AcWing 1289

BSNY 在学等差数列和等比数列,当已知前三项时,就可以知道是等差数列还是等比数列。

现在给你 整数 序列的前三项,这个序列要么是等差序列,要么是等比序列,你能求出第 k 项的值吗。

如果第 k 项的值太大,对其取模 200907。

输入格式

第一行一个整数 T,表示有 T 组测试数据;

对于每组测试数据,输入前三项 a,b,c,然后输入 k。

输出格式

对于每组数据,输出第 k 项取模 200907 的值。

数据范围

1 ≤ T ≤ 100 , 1 ≤ a ≤ b ≤ c ≤ 1 0 9 , 1 ≤ k ≤ 1 0 9 1≤T≤100, 1≤a≤b≤c≤10^9, 1≤k≤10^9 1T100,1abc109,1k109

输入样例:

21 2 3 51 2 4 5

输出样例:

516

分析:

设 给 定 前 三 项 为 a , b , c 。 设给定前三项为a,b,c。 a,b,c

等 差 数 列 : a + b = 2 c , 通 项 公 式 : a k = a 1 + ( k − 1 ) d 等差数列:a+b=2c,通项公式:a_k=a_1+(k-1)d a+b=2c:ak=a1+(k1)d

等 比 数 列 : a × c = b 2 , 通 项 公 式 : a k = a 1 q k − 1 等比数列:a×c=b^2,通项公式:a_k=a_1q^{k-1} a×c=b2:ak=a1qk1

问题:

是 否 存 在 某 三 个 数 , 使 得 我 们 无 法 确 定 是 等 差 数 列 还 是 等 比 数 列 , 以 至 于 无 法 计 算 第 k 项 。 是否存在某三个数,使得我们无法确定是等差数列还是等比数列,以至于无法计算第k项。 使k

将 a = 2 c − b 带 入 a × b = b 2 将a=2c-b带入a×b=b^2 a=2cba×b=b2

得 ( b − c ) 2 = 0 , 即 b = c , 同 理 得 到 a = b = c , 也 就 是 公 差 为 0 的 等 差 数 列 或 公 比 为 1 的 等 比 数 列 。 得(b-c)^2=0,即b=c,同理得到a=b=c,也就是公差为0的等差数列或公比为1的等比数列。 (bc)2=0b=ca=b=c01

此 时 我 们 当 作 等 差 数 列 来 处 理 , 求 第 k 项 即 可 。 此时我们当作等差数列来处理,求第k项即可。 k

代码:

#include
#define ll long long using namespace std;const int mod=200907;ll quick_pow(ll a,ll b,int mod){ ll res=1; while(b) { if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; } return res;}int main(){ int T; ll a,b,c,k; cin>>T; while(T--) { cin>>a>>b>>c>>k; if(a+c==2*b) cout<<(a+(b-a)*(k-1))%mod<
上一篇:快速幂(排列组合) - 越狱 - AcWing 1290
下一篇:线性筛(分解阶乘质因子) - 阶乘分解 - AcWing 197

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年03月19日 07时47分52秒