本文共 1560 字,大约阅读时间需要 5 分钟。
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 1≤T≤100,1≤a≤b≤c≤109,1≤k≤109
输入样例:
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+(k−1)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=a1qk−1
问题:
是 否 存 在 某 三 个 数 , 使 得 我 们 无 法 确 定 是 等 差 数 列 还 是 等 比 数 列 , 以 至 于 无 法 计 算 第 k 项 。 是否存在某三个数,使得我们无法确定是等差数列还是等比数列,以至于无法计算第k项。 是否存在某三个数,使得我们无法确定是等差数列还是等比数列,以至于无法计算第k项。
将 a = 2 c − b 带 入 a × b = b 2 将a=2c-b带入a×b=b^2 将a=2c−b带入a×b=b2
得 ( b − c ) 2 = 0 , 即 b = c , 同 理 得 到 a = b = c , 也 就 是 公 差 为 0 的 等 差 数 列 或 公 比 为 1 的 等 比 数 列 。 得(b-c)^2=0,即b=c,同理得到a=b=c,也就是公差为0的等差数列或公比为1的等比数列。 得(b−c)2=0,即b=c,同理得到a=b=c,也就是公差为0的等差数列或公比为1的等比数列。
此 时 我 们 当 作 等 差 数 列 来 处 理 , 求 第 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<
转载地址:http://woor.baihongyu.com/