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 }
posted @ 2012-07-06 16:52  jzlikewei  阅读(154)  评论(0编辑  收藏  举报