HDU 2187 A sequence of numbers

该题是是给出前3个数,要么是等差要么是等比,要你求第k个数,这个题关键是用到快速取幂;

#include<stdio.h>
#include
<stdlib.h>
long long getq( long long t,int k )
{
if( k==1 )
return t;
long long q = getq( t,k/2 );
if( k%2 )
{
return ( q*q*t )%200907;
}
else return ( q*q )%200907;
}
int main()
{
long long a,b,c,k;
int T;
scanf(
"%d",&T );
while( T-- )
{
scanf(
"%I64d%I64d%I64d%I64d",&a,&b,&c,&k );
k
--;
if( ( b-a )==( c-b ) )
{
long long t=b-a,sum;
sum
=(t%200907*k+a)%200907;
printf(
"%I64d\n",sum );
}
else
{
long long t=b/a,sum;
t
=getq( t%200907,k );
sum
=((a%200907)*t)%200907;
printf(
"%I64d\n",sum );
}
}
return 0;
}

  

posted @ 2011-08-27 20:40  wutaoKeen  阅读(83)  评论(0编辑  收藏  举报