给定某个序列的前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 }