首页 > 代码库 > hdu 2817 A sequence of numbers(快速幂取余)

hdu 2817 A sequence of numbers(快速幂取余)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2817

题目大意:给出三个数,来判断是等差还是等比数列,再输入一个n,来计算第n个数的值。

 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #define m 200907 5  6 using namespace std; 7  8 __int64 fun(__int64 j,__int64 k) 9 {10     __int64 s=1;11     while (k)12     {13         if (k%2==1)14             s=s*j%m;15         j=(j*j)%m;16         k/=2;17     }18     return s;19 }20 int main ()21 {22     __int64 t,a,b,c,n,s;23     cin>>t;24     while (t--)25     {26         cin>>a>>b>>c>>n;27         if (b-a==c-b)28         {29             int d=b-a;30             s=(a+(n-1)*d)%m;31         }32         else33         {34             int q=b/a;35             s=(a*fun(q,n-1))%m;36         }37         printf ("%I64d\n",s);38     }39     return 0;40 }