序列的第k个数(判断等比等差,求第k项

# 题意

给定某个序列的前3项a,b,c,可能是等比也可能是等差,求第k项,对200907取模

# 题解

可以证明,只有当a=b=c的时候前三项才能既是等比数列又是等差数列,

所以直接判断然后快速幂求即可

 1 #include<bits/stdc++.h>
 2 #define ll long long
 3 using namespace std;
 4 const int p=200907;
 5 ll qmi(ll a,ll b){
 6     ll res=1;
 7     while(b){
 8         if(b&1) res=res*a%p;
 9         b>>=1;
10         a=a*a%p;
11     }
12     return res;
13 }
14 int main(){
15     int t;
16     cin>>t;
17 
18     while(t--){
19         ll a,b,c,k;
20         cin>>a>>b>>c>>k;
21         ll res;
22         if(a+c==2*b){
23             res=(a+(k-1)*(b-a))%p;
24         }
25         else{
26             res=a*qmi((b/a),k-1)%p;
27         }
28         cout<<res<<endl;
29     }
30 }

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12604922.html