hdu 2817 A sequence of numbers
题目大意,给定三个数,可能是等比或者等差数列,求第k项.
本质就是快速幂+取模。
wa了好多次,才发现是把一个^写成了&.
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 const long long MOD=200907; 5 long long a,b,c; 6 inline long long Qexp (long long A, int p ) 7 { 8 9 long long ans=1,tmp =A%MOD; 10 while(p!=0) 11 { 12 if(p&1) 13 ans=ans*tmp%MOD; 14 tmp=tmp*tmp%MOD; 15 p>>=1; 16 } 17 return ( ans ); 18 } 19 int main(int argc, char* argv[]) 20 { 21 int n; 22 scanf("%d",&n); 23 while (n--) 24 { 25 26 int k; 27 cin>> a>>b>>c>>k; 28 long long ans; 29 if(a+c==b*2) 30 { 31 long long e=(c-b)%MOD; 32 ans=(a%MOD+( ((k-1)%MOD)*e)% MOD) %MOD; 33 }else 34 { 35 long long e = (c/b)%MOD; 36 ans=(Qexp(e,k-1)%MOD*(a%MOD))%MOD; 37 } 38 cout<<ans<<endl; 39 } 40 41 }